添加非空字段

【 TiDB 使用环境】测试
【 TiDB 版本】v 6.5
给当前表加一个非空字段,那原来的数据有变化吗?

这是我测试的一个情况

试了一下,和MySQL8.0表现一致

展开说说 大佬

没懂意思

我测试表现一致哎,都是补0

一直都是这样

有没有文档详细说这个的?

展开什么?我刚在8.0里验证了一下,和你验证的一样,varhcar是给了空值,int是给了0。

1 个赞

你是不是以前也是用sqlserver?sqlserver是会报错。

ALTER TABLE 只允许添加满足下述条件的列: 列可以包含 Null 值;或者列具有指定的 DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允许添加此列。不能将列“c_temp”添加到非空表“tb_store”中,因为它不满足上述条件。

以前我认为是会报错的,现在都自动补数了。牛!
5.7是自动补数还是报错啊?

我这边没有5.7的环境了,都升级到8.0了。

和sql mode有关系 还是8.0 以上就默认 为0了。

没找到,但我记得就是这样的

跟mysql是一样的哈。添加NOT NULL约束了,一般配合给个默认值一起用。

int的直接补0

这个跟你添加的字段类型以及是否有默认值有关系,添加整形非null原来的数据也会变化,如果是字符串可能是空

新增字段会补充默认值

int 补0

用 NOT NULL约束 + 默认值