如何为PROJECT表添加必填start_date列且无需插入唯一值?
解决MySQL添加必填date列时的'0000-00-00'错误
问题根源:你的表已经有数据了,添加NOT NULL的date列时,MySQL会自动给现有行填充默认的0000-00-00,但如果你的SQL模式里开启了NO_ZERO_DATE或NO_ZERO_IN_DATE,这种零日期会被判定为非法,就会触发报错。
下面是几种可行的解决办法:
方法一:临时调整SQL模式绕过限制
- 先查当前的SQL模式:
SELECT @@sql_mode; - 临时移除禁止零日期的规则:
SET sql_mode = REPLACE(@@sql_mode, 'NO_ZERO_DATE,NO_ZERO_IN_DATE', ''); - 执行添加列的语句:
ALTER TABLE PROJECT ADD start_date date NOT NULL;
- 把SQL模式改回原来的样子(用第一步查到的内容替换):
SET sql_mode = '原来的模式值';
方法二:添加列时指定合法默认值
直接给新列设置一个有效的默认日期,MySQL会用这个值填充现有行,不会用零日期:
ALTER TABLE PROJECT ADD start_date date NOT NULL DEFAULT CURRENT_DATE;
要是之后不需要默认值,再执行这句去掉:
ALTER TABLE PROJECT ALTER COLUMN start_date DROP DEFAULT;
方法三:先加允许为空的列,填充数据后再设为必填
如果不想用默认值,可以分三步操作:
- 添加允许为空的列:
ALTER TABLE PROJECT ADD start_date date;
- 给所有现有行填充合法日期(替换成你需要的日期):
UPDATE PROJECT SET start_date = '2024-01-01';
- 修改列为必填:
ALTER TABLE PROJECT MODIFY start_date date NOT NULL;
内容的提问来源于stack exchange,提问作者alasdair hando
相关产品推荐
相关产品推荐

