1.问题描述
因为要更改"pb_project"表中的"is_fund_program"列为非空,
ALTER TABLE
pb_projectMODIFY COLUMN
is_fund_programTINYINT (1) NOT NULL DEFAULT '0' COMMENT '是否是基金项目,0 : 不是基金项目,1:是基金项目'
错误信息为:[Err] 1138 - Invalid use of NULL value
很是奇怪,其他列使用该命令可以改,为什么仅有这一列无法改。
2.错误原因
出现该错误的原因可能是因为已存在的数据的‘is_fund_program’列为null,与not null的设置冲突。(查到的原因)。
我自己认为是因为在刚开始新建数据表时,将该列的表结构已经设置,在后续进行更改的时候会因为与之前的设置有冲突(至于为什么这里更改时不能更改,我也没太理解),因为之前我在新建表的时候将编号列的结构属性设置了。
鉴于无法设置为非空,所以通过新建列并设置好not null,便可以成功。
3.解决办法
1)添加新列,设置列的结构属性。
alter table information add column ‘yyy’ varchar(255) not null first; -新添加列yyy至第一列.
2)将出错的列内容复制到新列中并删除出错列
update pb_project set yyy=‘is_fund_program’; —将’is_fund_program’列的所有值复制到yyy列.
alter table pb_project drop ‘编号’; —删除出错的列.
3)修改新列名为出错的列名
alter table pb_project change ‘yyy’ ‘编号’ varchar(255) not null;