É assim que você pode ter campos createDate / lastModified automáticos e flexíveis usando gatilhos:
Primeiro, defina-os assim:
CREATE TABLE `entity` (
`entityid` int(11) NOT NULL AUTO_INCREMENT,
`createDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastModified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`name` varchar(255) DEFAULT NULL,
`comment` text,
PRIMARY KEY (`entityid`),
)
Em seguida, adicione estes gatilhos:
DELIMITER ;;
CREATE trigger entityinsert BEFORE INSERT ON entity FOR EACH ROW BEGIN SET NEW.createDate=IF(ISNULL(NEW.createDate) OR NEW.createDate='0000-00-00 00:00:00', CURRENT_TIMESTAMP, IF(NEW.createDate<CURRENT_TIMESTAMP, NEW.createDate, CURRENT_TIMESTAMP));SET NEW.lastModified=NEW.createDate; END;;
DELIMITER ;
CREATE trigger entityupdate BEFORE UPDATE ON entity FOR EACH ROW SET NEW.lastModified=IF(NEW.lastModified<OLD.lastModified, OLD.lastModified, CURRENT_TIMESTAMP);
- Se você inserir sem especificar createDate ou lastModified, eles serão iguais e configurados para o carimbo de data / hora atual.
- Se você atualizá- los sem especificar createDate ou lastModified, lastModified será definido como o carimbo de data / hora atual.
Mas aqui está a parte legal:
- Se você inserir , poderá especificar um createDate mais antigo que o registro de data e hora atual , permitindo que as importações de tempos antigos funcionem bem (lastModified será igual a createDate).
- Se você atualizar , poderá especificar um lastModified mais antigo que o valor anterior ('0000-00-00 00:00:00' funciona bem), permitindo atualizar uma entrada se você estiver fazendo alterações cosméticas (corrigindo um erro de digitação em um comentário ) e você deseja manter a data lastModified antiga . Isso não modificará a data lastModified.