U0400021:GaussDB中INSERT ON DUPLICATE KEY UPDATE不支持更新带有全局二级索引(GSI)的表
描述
数据库类型与版本
- 源库类型与版本:MySQL 5.5、5.6、5.7、8.0版本。
- 目标库类型与版本:GaussDB分布式版。
语法示例
如果UGO判断出GaussDB分布式表的分布键不是主键及唯一键的超集,则会生成此错误提示。
实际上在GaussDB中INSERT ON DUPLICATE KEY UPDATE语句不支持用于带全局二级索引(GSI)的表中,而在GaussDB分布式中如果指定的分布键不是主键及唯一键的超集,则数据库会自动创建全局二级索引,如下示例在GaussDB分布式中不支持。
CREATE TABLE demo ( id INT PRIMARY KEY, info VARCHAR(10), email VARCHAR(10), UNIQUE (id, info) ) DISTRIBUTE BY HASH(email); INSERT INTO demo VALUES (10, 'AA', 'BB'), (4, 'EE', 'EE') ON DUPLICATE KEY UPDATE email = VALUES(email);
改造建议
对于具有全局二级索引的表,建议通过业务来判断数据是否冲突,并对此做出不同的处理,而不是依赖INSERT ON DUPLICATE KEY UPDATE语句来实现数据冲突的逻辑。