我有一个'created_date'DATETIME字段,我希望在插入时填充当前日期。我应该为这个触发器使用什么语法?这是我迄今为止的,但它是不正确的。MySQL在DATETIME字段中设置当前日期插入
CREATE TRIGGER set_created_date
BEFORE INSERT ON product
FOR EACH ROW BEGIN
SET NEW.created_date = now();
我有一个'created_date'DATETIME字段,我希望在插入时填充当前日期。我应该为这个触发器使用什么语法?这是我迄今为止的,但它是不正确的。MySQL在DATETIME字段中设置当前日期插入
CREATE TRIGGER set_created_date
BEFORE INSERT ON product
FOR EACH ROW BEGIN
SET NEW.created_date = now();
最好的办法是将该列更改为时间戳。 MySQL会自动使用连续的第一个时间戳作为'最后修改'的值并为你更新。如果您只是想节省创建时间,这是可配置的。
见文件http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
DELIMITER ;;
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
SET NEW.created_date = NOW();
END;;
DELIMITER ;
使用NOW()是不是一个好主意。它只保存当前的时间和日期。当您更新数据时,它不会更新当前的日期和时间。如果你想添加一次,默认值= Now()是最好的选择。如果你想使用时间戳。并且想要更新该值,每次更新该行时。然后,触发器是最好的选择使用。
这两个toturial将有助于实现触发。
从MySQL 5.6.X你可以这样做:
ALTER TABLE `schema`.`users`
CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;
这样,你的列将在一个新的行插入或更新当前的时间戳更新。
如果你使用MySQL工作台,你可以把CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
中的默认值领域,像这样:
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html
完美的作品,谢谢:) – William 2009-07-16 17:12:45
最新版本mysql不支持多时间戳,所以我们可以有一个时间戳和多个触发器。 – 2016-02-28 07:36:05