【ClickHouse问题】更新表字段类型为Nullable(Int32)的列值,最终结果都是固定一个值:93147008???
问题描述:
clickhouse更新表数据。更新的列数据类型是Nullable(Int32),不管更新为什么数值,最后查询的结果都是一个固定值:93147008
问题复现:
1:建一张测试表
CREATE TABLE sys_user_menu_relationships_test2 ( `id` Int32, `userId` Nullable(String), `rightId` Nullable(Int32), `onlyread` Int32, `selectFlag` Int32, `insertFlag` Nullable(Int32), `deleteFlag` Nullable(Int32), `updateFlag` Nullable(Int32), `downloadFlag` Nullable(Int32) ) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity = 8192;
2:插入几条数据
INSERT INTO sys_user_menu_relationships_test2(id,userId,rightId ,onlyread ,selectFlag ,insertFlag,deleteFlag ,updateFlag ,downloadFlag ) VALUES (1,'101',1,2,3,4,5,6,7); INSERT INTO sys_user_menu_relationships_test2(id,userId,rightId ,onlyread ,selectFlag ,insertFlag,deleteFlag ,updateFlag ,downloadFlag ) VALUES (2,'102',1,2,3,4,5,6,7); INSERT INTO sys_user_menu_relationships_test2(id,userId,rightId ,onlyread ,selectFlag ,insertFlag,deleteFlag ,updateFlag ,downloadFlag ) VALUES (3,'103',1,2,3,4,5,6,7); INSERT INTO sys_user_menu_relationships_test2(id,userId,rightId ,onlyread ,selectFlag ,insertFlag,deleteFlag ,updateFlag ,downloadFlag ) VALUES (4,'104',1,2,3,4,5,6,7); INSERT INTO sys_user_menu_relationships_test2(id,userId,rightId ,onlyread ,selectFlag ,insertFlag,deleteFlag ,updateFlag ,downloadFlag ) VALUES (5,'105',1,2,3,4,5,6,7); INSERT INTO sys_user_menu_relationships_test2(id,userId,rightId ,onlyread ,selectFlag ,insertFlag,deleteFlag ,updateFlag ,downloadFlag ) VALUES (6,'106',1,2,3,4,5,6,7);
3:查询数据
SELECT * FROM sys_user_menu_relationships_test2 ┌─id─┬─userId─┬─rightId─┬─onlyread─┬─selectFlag─┬─insertFlag─┬─deleteFlag─┬─updateFlag─┬─downloadFlag─┐ │ 6 │ 106 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ └────┴────────┴─────────┴──────────┴────────────┴────────────┴────────────┴────────────┴──────────────┘ ┌─id─┬─userId─┬─rightId─┬─onlyread─┬─selectFlag─┬─insertFlag─┬─deleteFlag─┬─updateFlag─┬─downloadFlag─┐ │ 1 │ 101 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 2 │ 102 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 3 │ 103 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 4 │ 104 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 5 │ 105 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ └────┴────────┴─────────┴──────────┴────────────┴────────────┴────────────┴────────────┴──────────────┘ 6 rows in set. Elapsed: 0.005 sec.
4:更新Int32列selectFlag (能正常更新,没有异常)
centf8118.sharding1.db :) ALTER TABLE sys_user_menu_relationships_test2 update selectFlag = 12 where id = 1; ALTER TABLE sys_user_menu_relationships_test2 UPDATE selectFlag = 12 WHERE id = 1 Ok. 0 rows in set. Elapsed: 0.003 sec. centf8118.sharding1.db :) SELECT * FROM sys_user_menu_relationships_test2; SELECT * FROM sys_user_menu_relationships_test2 ┌─id─┬─userId─┬─rightId─┬─onlyread─┬─selectFlag─┬─insertFlag─┬─deleteFlag─┬─updateFlag─┬─downloadFlag─┐ │ 6 │ 106 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ └────┴────────┴─────────┴──────────┴────────────┴────────────┴────────────┴────────────┴──────────────┘ ┌─id─┬─userId─┬─rightId─┬─onlyread─┬─selectFlag─┬─insertFlag─┬─deleteFlag─┬─updateFlag─┬─downloadFlag─┐ │ 1 │ 101 │ 1 │ 2 │ 12 │ 4 │ 5 │ 6 │ 7 │ │ 2 │ 102 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 3 │ 103 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 4 │ 104 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 5 │ 105 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ └────┴────────┴─────────┴──────────┴────────────┴────────────┴────────────┴────────────┴──────────────┘ 6 rows in set. Elapsed: 0.006 sec.
5:更新Nullable(Int32)列downloadFlag (见证奇迹的时刻,注意这次更新的值为12)
centf8118.sharding1.db :) ALTER TABLE sys_user_menu_relationships_test2 update downloadFlag= 12 where id = 3; ALTER TABLE sys_user_menu_relationships_test2 UPDATE downloadFlag = 12 WHERE id = 3 Ok. 0 rows in set. Elapsed: 0.003 sec. centf8118.sharding1.db :) SELECT * FROM sys_user_menu_relationships_test2; SELECT * FROM sys_user_menu_relationships_test2 ┌─id─┬─userId─┬─rightId─┬─onlyread─┬─selectFlag─┬─insertFlag─┬─deleteFlag─┬─updateFlag─┬─downloadFlag─┐ │ 6 │ 106 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ └────┴────────┴─────────┴──────────┴────────────┴────────────┴────────────┴────────────┴──────────────┘ ┌─id─┬─userId─┬─rightId─┬─onlyread─┬─selectFlag─┬─insertFlag─┬─deleteFlag─┬─updateFlag─┬─downloadFlag─┐ │ 1 │ 101 │ 1 │ 2 │ 12 │ 4 │ 5 │ 6 │ 7 │ │ 2 │ 102 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 3 │ 103 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 93147008 │ │ 4 │ 104 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 5 │ 105 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ └────┴────────┴─────────┴──────────┴────────────┴────────────┴────────────┴────────────┴──────────────┘ 6 rows in set. Elapsed: 0.006 sec.
更新完之后,就看到id = 3的downloadFlag列那个值是:93147008
6:再更新Nullable(Int32)列 updateFlag (见证奇迹的时刻2,注意这次更新的值为34)
centf8118.sharding1.db :) ALTER TABLE sys_user_menu_relationships_test2 update updateFlag= 34 where id = 3; ALTER TABLE sys_user_menu_relationships_test2 UPDATE updateFlag = 34 WHERE id = 3 Ok. 0 rows in set. Elapsed: 0.004 sec. centf8118.sharding1.db :) SELECT * FROM sys_user_menu_relationships_test2; SELECT * FROM sys_user_menu_relationships_test2 ┌─id─┬─userId─┬─rightId─┬─onlyread─┬─selectFlag─┬─insertFlag─┬─deleteFlag─┬─updateFlag─┬─downloadFlag─┐ │ 6 │ 106 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ └────┴────────┴─────────┴──────────┴────────────┴────────────┴────────────┴────────────┴──────────────┘ ┌─id─┬─userId─┬─rightId─┬─onlyread─┬─selectFlag─┬─insertFlag─┬─deleteFlag─┬─updateFlag─┬─downloadFlag─┐ │ 1 │ 101 │ 1 │ 2 │ 12 │ 4 │ 5 │ 6 │ 7 │ │ 2 │ 102 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 3 │ 103 │ 1 │ 2 │ 3 │ 4 │ 5 │ 93147008 │ 93147008 │ │ 4 │ 104 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ │ 5 │ 105 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ └────┴────────┴─────────┴──────────┴────────────┴────────────┴────────────┴────────────┴──────────────┘ 6 rows in set. Elapsed: 0.009 sec.
问题来了,为什么数据类型为Nullable(Int32)列,更新的时候不管怎么更新都是固定的一个值:93147008???
有哪位大神知道为啥???
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步