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