2009-07-16 88 views
16

我有一個'created_date'DATETIME字段,我希望在插入時填充當前日期。我應該爲這個觸發器使用什麼語法?這是我迄今爲止的,但它是不正確的。MySQL在DATETIME字段中設置當前日期插入

CREATE TRIGGER set_created_date 
BEFORE INSERT ON product 
FOR EACH ROW BEGIN 
SET NEW.created_date = now(); 

回答

16

最好的辦法是將該列更改爲時間戳。 MySQL會自動使用連續的第一個時間戳作爲'最後修改'的值併爲你更新。如果您只是想節省創建時間,這是可配置的。

見文件http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

+0

完美的作品,謝謝:) – William 2009-07-16 17:12:45

+1

最新版本mysql不支持多時間戳,所以我們可以有一個時間戳和多個觸發器。 – 2016-02-28 07:36:05

22
DELIMITER ;; 
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW 
BEGIN 
    SET NEW.created_date = NOW(); 
END;; 
DELIMITER ; 
3

使用NOW()是不是一個好主意。它只保存當前的時間和日期。當您更新數據時,它不會更新當前的日期和時間。如果你想添加一次,默認值= Now()是最好的選擇。如果你想使用時間戳。並且想要更新該值,每次更新該行時。然後,觸發器是最好的選擇使用。

  1. http://www.mysqltutorial.org/sql-triggers.aspx
  2. http://www.tutorialspoint.com/plsql/plsql_triggers.htm

這兩個toturial將有助於實現觸發。

11

從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中的默認值領域,像這樣:

enter image description here

http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html

相關問題