【发布时间】:2021-02-08 12:28:58
【问题描述】:
我有下面的代码,但由于某种原因在 mysql 中运行第二个 alter table 语句以添加新列时出错。我得到的错误是Invalid default value for 'start'
如果我注释掉第二个更改表,它会起作用,因为数据已插入。
CREATE TABLE users (
id int unsigned NOT NULL PRIMARY KEY,
name varchar(255) NOT NULL
);
ALTER TABLE users ADD start datetime DEFAULT (DATE_SUB(now(), INTERVAL -1 DAY)) NOT NULL;
insert into users (id, name) values (1, 'usera'), (2, 'usera');
ALTER TABLE users ADD anotherDate datetime DEFAULT (now()) NOT NULL; -- This errors
select * from users;
完整错误是:ERROR 1067 42000 Invalid default value for 'start'
小提琴显示错误:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=2df3b421793a7470a321247abec85b47
【问题讨论】:
-
这能回答你的问题吗? MySQL datetime default time with interval 您不能在默认列中执行此操作。您需要将其设置为日期时间并在插入时进行计算。
-
哪个版本的mysql?我复制了你的语句,并没有收到错误....(在 MySQL8.0.22 上)
-
@Luuk mysql 8.0.23
-
@ikiK 不,因为这个答案说它根本无法完成。但是我能够做到这一点,因为插入语句有效。它只是第二次更改引发错误。
-
看到这个 dbfiddle:dbfiddle.uk/… 更改 sql_mode 后,它可以工作
标签: mysql