2009-07-16 2 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

+1

最新バージョンのmysqlは複数のタイムスタンプをサポートしていないので、1つのタイムスタンプと複数のトリガを持つことができます。 –

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

別のタスクを追加することはできますか?>> "SET NEW.last_visited = NOW();" ?私はしましたが、エラーが発生しました。ありがとうございます。 @pevik –

3

()は良いアイデアではありません。現在の時刻と日付のみが保存されます。データを更新すると、現在の日付と時刻は更新されません。一度時刻を追加したい場合は、デフォルト値= Now()が最適です。タイムスタンプを使用する場合。その行が更新されるたびにこの値を更新する必要があります。トリガーは、使用するのが最適です。

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

これら2 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 Workbenchを使用している場合

、あなただけそうのように、DEFAULT値フィールドに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