回答:
日付列のデフォルトをNOW()やCURRENT_DATEなどの関数の値に設定することはできません。例外は、TIMESTAMP列のデフォルトとしてCURRENT_TIMESTAMPを指定できることです。
したがって、TIMESTAMP
列の代わりに列を追加すると、MySQL 5.5で達成したいことは機能しますDATE
。
機能を許可する5.6.xの変更点はここに記載されています。完全性のために関連する要約を引用します。
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 ;
更新時に更新値を自動的に更新する必要がある場合、またはヌル値を防止する場合は、更新値を作成することもできます。
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)