可以将 MySQL 5.7 中的 DATE(NOT DATETIME)列的默认值设置为当前日期吗?
我尝试这个(由工作台生成):
ALTER TABLE `db`.`table` CHANGE COLUMN `column` `column` DATE NOT NULL DEFAULT CURDATE() ;
但对我不起作用。 (表中无数据)
不,你不能。 文档对此非常清楚:
这意味着,例如,您无法设置日期的默认值 列是函数的值,例如 NOW() 或 CURRENT_DATE。 例外情况是您可以指定 CURRENT_TIMESTAMP 作为默认值 对于 TIMESTAMP 和 DATETIME 列。请参见第 12.3.5 节“自动 TIMESTAMP 和 DATETIME 的初始化和更新”。
您可以执行以下操作之一:
DATETIME
默认值的列。 创建将日期提取为单独列的视图。insert
触发器来设置 date
列。如果您有另一列包含默认值为 NOW() 的日期时间字段,则可以通过一种方法来执行此操作。 看这篇文章:
BEFORE INSERT
触发器解决了这个问题:
CREATE TRIGGER `my_schema`.`my_table_BEFORE_INSERT` BEFORE INSERT ON `my_table` FOR EACH ROW
BEGIN
IF NEW.date IS NULL THEN
SET NEW.date = CURDATE();
END IF;
END