2

如果我尝试将数据插入到已经包含该主键的表中,它显然会失败。

有没有一种简单的方法来检查我未能插入的数据是否与表中已有的数据相匹配?(即,如果非主键字段与该主键已经存在的字段相同)

理想情况下,当我尝试插入已使用的主键时,我希望得到 2 个不同的错误,而不是得到一个错误:

- Error1: primary key constraint broken - data being inserted is already in table
- Error2: primary key constraint broken - attempt to enter different data for existing primary key
4

2 回答 2

2

试试这个:

INSERT INTO yourTable (field1, field2, field3...)
SELECT yourValue1, yourValue2, yourValue3...
FROM dual
WHERE NOT EXISTS (SELECT * 
                  FROM yourTable 
                  WHERE field1 = yourValue1
                  AND field2 = yourValue2
                  AND field3 = yourValue3...);

此查询检查您的字段,并且仅在记录不存在时插入。

于 2013-09-05T07:07:13.057 回答
2

要检查你可以做这样的事情

SELECT COUNT(*) FROM
(
  SELECT * FROM tab1
  UNION
  SELECT * FROM tab2
);

UNION删除重复项,因此如果两个表中的行相同,则上述查询将返回相同的结果

SELECT COUNT(*) FROM tab1;

或者

SELECT COUNT(*) FROM tab2;

你的问题不是很详细(例如你如何插入这些数据?)所以我的回答也很笼统,但我相信它对你有用。

于 2013-09-05T07:12:04.210 回答