Sql 语句:在要插入的字段中未指定主键时,插入键更新未按预期工作

Posted

技术标签:

【中文标题】Sql 语句:在要插入的字段中未指定主键时,插入键更新未按预期工作【英文标题】:Sql Statement: Insert On Key Update is not working as expected when primary key is not specified in the fields to insert 【发布时间】:2019-02-06 03:01:25 【问题描述】:

您好,我正在使用“INSERT ON DUPLICATE KEY UPDATE”sql 语句来更新我的数据库。

一切正常,因为我总是插入这样的唯一 ID:

INSERT INTO devices(uniqueId,name) 
    VALUES (4,'Printer') 
    ON DUPLICATE KEY UPDATE name = 'Central Printer';

但是现在,我需要插入元素但我没有插入唯一的 id,我只插入或更新这样的值:

INSERT INTO table (a,b,c,d,e,f,g)
    VALUES (2,3,4,5,6,7,8) 
    ON DUPLICATE KEY
        UPDATE a=a, b=b, c=c, d=d, e=e, f=f, g=g;

不得不说每次插入一行都会生成一个自增主键。

我的问题是现在插入的行是重复的,因为我没有在 sql 语句中显式插入主键或唯一 ID。

我应该怎么做?

例如,也许我需要显式插入主键?我想使用这个主自动增量键。

根据 Gordon 的建议,我添加了一个示例案例,您可以在下一张图片中看到 Rows Output

在这种情况下,我添加了前三行,然后尝试使用不同的信息再次更新前三行....好吧,我看到了错误...没有可比较的键... ... :$

谢谢你的回答,

【问题讨论】:

请提供示例数据来说明您要解决的问题。 【参考方案1】:

如果您想防止列被重复,请在它们上创建唯一索引或约束。例如:

create unique index unq_table_7 on table(a, b, c, d, e, f, g);

这将保证 7 列(组合起来)是唯一的。

【讨论】:

以上是关于Sql 语句:在要插入的字段中未指定主键时,插入键更新未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何插入自增长的主键值(如图)。谢谢

MySQL优化 SQL 语句的优化

Entity Framework 4.1 Code First - 插入非主键时自动递增字段

主键字段报错doesn't have a default value (mybatis)

sqlserver外键关系有啥用?

主键对数据插入的影响