Current_timestamp
をデフォルト値として設定できません。私のMysql
バージョンは5.5.47
です。
クエリは
ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
ローカルデータベースでmysql V5.6.56
を使用すると問題なく動作します。
MySQL 5.5マニュアル から:
日付列のデフォルトをNOW()やCURRENT_DATEなどの関数の値に設定することはできません。例外は、CURRENT_TIMESTAMPをTIMESTAMP列のデフォルトとして指定できることです。
したがって、TIMESTAMP
列の代わりにDATE
列を追加すると、MySQL 5.5で達成したいことが機能します。
機能を可能にする5.6.xでの変更は文書化されています here 、そして完全性のために関連する要約を引用します:
MySQL 5.6.5以降、TIMESTAMPおよびDATETIMEカラムは自動的に初期化され、現在の日時(つまり、現在のタイムスタンプ)に更新されます。 5.6.5より前では、これはTIMESTAMPにのみ当てはまり、テーブルごとに最大で1つのTIMESTAMP列に当てはまります。
チェック この答え 。
オプションは次のとおりです。
次のように、列タイプをTIMESTAMPに変更します。
ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
列を自動的に更新するトリガーを作成します。
ALTER TABLE `downloads` ADD `date` DATETIME NULL; -- date must allow
-- NULLs or default
-- to a special value
DROP TRIGGER IF EXISTS downloads_BI;
DELIMITER //
CREATE TRIGGER downloads_BI
BEFORE INSERT ON downloads FOR EACH ROW
BEGIN
IF (NEW.date IS NULL) THEN -- change the isnull check for the default used
SET NEW.date = now();
END IF;
END//
DELIMITER ;
更新時に自動的に更新する必要がある場合、またはnull値を防止したい場合は、更新値も作成できます。
mysql> INSERT INTO downloads (i) VALUES (1); -- I do not set date
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM downloads;
+------+---------------------+
| i | date |
+------+---------------------+
| 1 | 2016-03-22 09:27:52 |
+------+---------------------+
1 row in set (0.00 sec)