web-dev-qa-db-ja.com

MySQLは挿入時にDATETIMEフィールドに現在の日付を設定します

挿入時に現在の日付を入力する「created_date」DATETIMEフィールドがあります。このトリガーに使用する構文は何ですか?これは私がこれまで持っているものですが、間違っています。

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

最善の策は、その列をタイムスタンプに変更することです。 MySQLは、行の最初のタイムスタンプを「最終変更」値として自動的に使用し、それを更新します。作成時間を節約したいだけなら、これは設定可能です。

ドキュメントを参照してください http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

18
dunedain289
DELIMITER ;;
CREATE TRIGGER `my_table_bi` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
    SET NEW.created_date = NOW();
END;;
DELIMITER ;
35
pevik

MySQL 5.6.X以降では、これを行うことができます。

ALTER TABLE `schema`.`users` 
CHANGE COLUMN `created` `created` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;

これにより、新しい行が挿入または更新されると、列が現在のタイムスタンプで更新されます。

MySQL Workbenchを使用している場合は、CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPのように、DEFAULT値フィールドに:

enter image description here

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

15
Coreus

Now()を使用することはお勧めできません。現在の時刻と日付のみを保存します。データを更新しても、現在の日付と時刻は更新されません。時間を1回追加する場合は、デフォルト値= Now()が最適なオプションです。タイムスタンプを使用する場合。行が更新されるたびにthis値を更新する必要があります。次に、トリガーを使用するのが最適なオプションです。

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

これらの2つのtoturialは、トリガーの実装に役立ちます。

3