使用ctas INFORMATION_SCHEMA.`TABLES`表结构,新增字段后,被添加了默认值

一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题

【TiDB 使用环境】生产环境 /测试环境
【TiDB 版本】7.1.0
【部署方式】云上部署(什么云)/机器部署
【操作系统/CPU 架构/芯片详情】
【机器部署详情】CPU大小/内存大小/磁盘大小
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
create table jjj like INFORMATION_SCHEMA.TABLES;
insert into jjj select * from INFORMATION_SCHEMA.TABLES limit 10;
select * from jjj;
alter table jjj add new_col1 varchar(10);
–new_col1为原表table_catalog的值;
mysql> select new_col1 ,count(1) from jjj group by new_col1;
±---------±---------+
| new_col1 | count(1) |
±---------±---------+
| def | 10 |
±---------±---------+
1 row in set (0.01 sec)
–查询table_catalog字段为NULL
mysql> select j.table_catalog,j.new_col1 from jjj j;
±--------------±---------+
| table_catalog | new_col1 |
±--------------±---------+
| NULL | def |
| NULL | def |
| NULL | def |
| NULL | def |
| NULL | def |
| NULL | def |
| NULL | def |
| NULL | def |
| NULL | def |
| NULL | def |
±--------------±---------+
10 rows in set (0.00 sec)
–group by显示有值
mysql> select j.table_catalog,count(1) from jjj j group by j.table_catalog;
±--------------±---------+
| table_catalog | count(1) |
±--------------±---------+
| def | 10 |
±--------------±---------+
1 row in set (0.00 sec)
添加新字段,默认将前面字段的值更新到新字段上了。
【其他附件:截图/日志/监控】

1 个赞

这明显是有bug

不直接基于 INFORMATION_SCHEMA.TABLES 建表,改用手动创建表结构
新增列时显式指定 DEFAULT NULL,避免隐式默认值逻辑触发 Bug
这样试试

手工建立表结构不会出现这个问题。
like生成的,以及使用生成表继续级联生成都会有这个问题。
如下都会造成问题。就感觉这个bug很离谱。。
create table ggg like INFORMATION_SCHEMA.tables;
insert into ggg select * from INFORMATION_SCHEMA.tables limit 10;
create table hhh like ggg;
insert into hhh select * from INFORMATION_SCHEMA.tables limit 10;
alter table ggg add new_col1 varchar(10);
alter table hhh add new_col1 varchar(10);
create table iii like ggg;
insert into iii select d.*,‘’ from INFORMATION_SCHEMA.tables d limit 10;
alter table iii add new_col2 varchar(10);

感觉这个挺神奇的

INFORMATION_SCHEMA.tables是基表还是视图呀

是tidb的系统内置视图。

CTAS视图不知道是什么行为,有可能这个问题和视图有关?

有可能的,换成information_schema下的其它视图也是一样的问题。
如果是自定义的视图,是不允许通过视图建表的。直接报错。
1347 - ‘tidbcs.v_1’ is not BASE TABLE

是一个bug吗

alter table jjj add new_col1 varchar(10); 你手动赋值 / 默认继承的是真实存储值,所以展示为 def,无异常。

这个尝试角度不一般啊,很少有人用元数据的视图like建表的哈,也许是真有bug,角度独特~

应该是bug