文档首页/ 数据库和应用迁移 UGO/ 用户指南/ 语法转换指南/ 转换错误码/ MySQL To GaussDB 转换错误码/ U0400021:GaussDB中INSERT ON DUPLICATE KEY UPDATE不支持更新带有全局二级索引(GSI)的表
更新时间:2025-06-04 GMT+08:00
分享

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语句来实现数据冲突的逻辑。

相关文档