Answers:
您不能将日期列的默认值设置为诸如NOW()或CURRENT_DATE之类的函数的值。唯一的例外是您可以将CURRENT_TIMESTAMP指定为TIMESTAMP列的默认值。
因此,如果添加一TIMESTAMP
列而不是一DATE
列,则要实现的目标将在MySQL 5.5中起作用。
此处记录了5.6.x中允许该功能的更改,为了完整性,我将引用相关的摘要:
从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在5.6.5之前,这仅适用于TIMESTAMP,并且每个表最多包含一个TIMESTAMP列。
检查此答案。
您的选择是:
将列类型更改为TIMESTAMP,如下所示:
ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
创建一个TRIGGER TRIGGER,它会自动更新该列:
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)