Чтобы ответить на ваш вопрос и посмотреть другие вопросы, вот ответ.Обратите внимание, что это было написано для MySQL 5.x.
DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1` (
`id` INT NULL AUTO_INCREMENT ,
`name` varchar(50) NOT NULL ,
`created` DATETIME ,
`updated` DATETIME ,
PRIMARY KEY (`id`),
INDEX (`name`)
);
DELIMITER $$
DROP TRIGGER IF EXISTS `test1_created`$$
CREATE TRIGGER `test1_created` BEFORE INSERT ON `test1`
FOR EACH ROW BEGIN
SET NEW.`created` = UTC_TIMESTAMP();
SET NEW.`updated` = UTC_TIMESTAMP();
END;
$$
DROP TRIGGER IF EXISTS `test1_updated`$$
CREATE TRIGGER `test1_updated` BEFORE UPDATE ON `test1`
FOR EACH ROW BEGIN
SET NEW.`updated` = UTC_TIMESTAMP();
END;
$$
DELIMITER ;
Примечание
Вы можете использовать TIMESTAMP для столбца updated
, который автоматически обновит значение таким образомне требует триггера BEFORE UPDATE, однако TIMESTAMP имеет диапазон от 1970 до 2038, который быстро приближается, и мне нравится думать, что мои приложения будут жить вечно :).Хотя значение TIMESTAMP составляет всего 4 байта, а DATETIME - 8 байтов.
TIMESTAMP range '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC
DATETIME range '1000-01-01 00:00:00' to '9999-12-31 23:59:59'