我有一個'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