urf*_*ion 24 timestamp default-value mysql-5.5 date
我无法设置Current_timestamp为默认值。我的Mysql版本是5.5.47.
查询是
ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Run Code Online (Sandbox Code Playgroud)
虽然它在我的本地数据库上使用mysql V5.6.56.
Phi*_*lᵀᴹ 29
您不能将日期列的默认值设置为 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 列。
jyn*_*nus 12
检查这个答案。
您的选择是:
将列类型更改为 TIMESTAMP,如下所示:
ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
Run Code Online (Sandbox Code Playgroud)创建一个自动更新列的触发器:
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 ;
Run Code Online (Sandbox Code Playgroud)
如果必须在更新时自动更新或想要防止空值,您可能还想创建一个更新值。
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)
Run Code Online (Sandbox Code Playgroud)