文档首页/ 数据库和应用迁移 UGO/ 用户指南/ 语法转换指南/ 转换错误码/ MySQL To GaussDB 转换错误码/ U0400020:GaussDB中INSERT ON DUPLICATE KEY UPDATE不支持更新主键或唯一键
更新时间:2025-06-04 GMT+08:00
分享

U0400020:GaussDB中INSERT ON DUPLICATE KEY UPDATE不支持更新主键或唯一键

描述

数据库类型与版本

  • 源库类型与版本:MySQL 5.5、5.6、5.7、8.0版本。
  • 目标库类型与版本:GaussDB所有版本。

语法示例

INSERT ON DUPLICATE KEY UPDATE语句用于带有唯一约束(UNIQUE INDEX或PRIMARY KEY)的表,如果插入表中的数据违反了唯一约束,则对冲突行执行UPDATE子句完成更新。但是在GaussDB中,主键、唯一索引列不允许UPDATE,如下示例UGO转换时不处理,并给出此错误提示。

CREATE TABLE duplicate_key_test (
    id INT PRIMARY KEY,
    info VARCHAR(10) UNIQUE
);
INSERT INTO duplicate_key_test VALUES (1, 'AA'), (2,'BB'), (3, 'CC');
INSERT INTO duplicate_key_test VALUES (10, 'DD'), (3, 'EE') ON DUPLICATE KEY UPDATE info = VALUES(info);

改造建议

如果确实需要更新唯一键,可以先使用DELETE语句删除具有旧键值的行,然后使用INSERT语句插入新行。如上述示例的手改方案参考:

DELETE FROM duplicate_key_test WHERE id in (10, 3);
INSERT INTO duplicate_key_test VALUES (10, 'DD'), (3, 'EE');

请注意,这种场景下无法再通过数据库来确保插入的数据不会冲突,需要通过业务来判断数据冲突与否的不同处理逻辑。

相关文档