我有一个带有主键的表MySQL由2个字段组成,如下所示
表中现有的记录是:
我发出的INSERT查询是:
当我运行查询时:
INSERT INTO `case_data`
VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD',***********************
显示的错误信息是:
[Err] 1062 - 重复录入' WCD / 2016/1000017'关键' PRIMARY'
我是否违反了主键约束?
提前致谢。
答案 0 :(得分:1)
您可以检查您尝试插入的行的主键值是否已存在于表中:
SELECT COUNT(*)
FROM case_data
WHERE caseno = 'WCD/2016/1000017' AND iteration = 2;
如果它返回0
,那么您将不会违反PK约束并且可以安全地插入您想要的行(假设没有其他检查,触发器,约束)。否则它将返回1
,这意味着您已经在这些列中有一行包含值,因此您将违反不允许的行的唯一性。
当它返回0
时,只需发出INSERT
命令。另外,请记住在语句中指定列表,以确保VALUES
中的每个值都放在目标表的右列中:
INSERT INTO case_data (caseno, iteration, casedate, casetype)
VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD');
如果它们不包含逗号或空格等替代字符,请避免在列和表名称周围使用反引号。这将使您的代码更具可读性,并且肯定会加快您的写作时间。