Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL错误:主键的重复条目“xxx”_Mysql_Composite Primary Key - Fatal编程技术网

MySQL错误:主键的重复条目“xxx”

MySQL错误:主键的重复条目“xxx”,mysql,composite-primary-key,Mysql,Composite Primary Key,我有一个主键由2个字段组成的表MySQL,如下所示 表中已有的记录包括: 我发出的插入查询是: 运行查询时: INSERT INTO `case_data` VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD',*********************** 显示的错误消息为: [Err]1062-密钥“主要”的重复条目“WCD/2016/1000017” 我是否违反了主键约束 提前感谢。您可以检查您尝试插入的行的主键值是否已存在于表中: SE

我有一个主键由2个字段组成的表MySQL,如下所示

表中已有的记录包括:

我发出的插入查询是:

运行查询时:

INSERT INTO `case_data` 
VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD',***********************
显示的错误消息为:

[Err]1062-密钥“主要”的重复条目“WCD/2016/1000017”

我是否违反了主键约束


提前感谢。

您可以检查您尝试插入的行的主键值是否已存在于表中:

SELECT COUNT(*)
FROM case_data
WHERE caseno = 'WCD/2016/1000017' AND iteration = 2;
如果它返回0,则不会违反PK约束,并且可以安全地插入所需的行,前提是不存在其他检查、触发器和约束。否则,它将返回1,这意味着您已经有一行在这些列中具有值,因此您将违反不允许的行的唯一性

当它返回0时,只需发出INSERT命令。此外,请记住在语句中指定列表,以确保值中的每个值都放在目标表的右列中:

INSERT INTO case_data (caseno, iteration, casedate, casetype)
VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD');

如果列名和表名不包含逗号或空格等替代字符,请避免在它们周围使用反勾号。这将使您的代码更具可读性,并且肯定会加快编写时间。

您只能在主键列中添加唯一的字符串。这里WCD/2016/1000017已经在表中列出,所以您不能在表中为主键列添加相同的字符串。是的,您违反了主键约束。@Vivek:如果我要将值“WCD/2016/1000017”更改为其他值,为什么我需要使用复合键?您可以使用自动递增的多个列id。这可能会解决你的问题。同意。但是手动递增“迭代”字段有什么错呢?这就是复合键的概念:您可以保持键的所有字段相同,并且只更改键的一个字段。但我仍然无法使用上面的insert查询插入行。一定有其他原因阻止您执行insert imho。选中此项:我单击了第一个框下面的构建架构,然后单击了第二个框下面的运行SQL。第二个盒子里什么也没出现。对不起,我从来没有使用过SQL Fiddle网站。它发出了CREATETABLE和INSERT语句。在第二个框中,您可以键入SELECT*FROM case_data以查看一切正常,并且在插入Kamil时没有出现错误。你是对的。第三级触发器的问题。问题解决了。谢谢你。