如果其中一列是重复的,我可以取消INSERT语句吗?



假设我有这两个INSERT语句,第一个是昨天的,第二个是今天的:

INSERT INTO table(id, field1, field2, field3) 
VALUES (1, "John", "Doe", "12345")
INSERT INTO table(id, field1, field2, field3) 
VALUES (1, "Mary", "May", "12345")

是否有一种方法使这些INSERT语句不插入行,如果在field3的任何行中已经有一个相等的值?这意味着不会插入第二条记录。

我已经搜索过了,但只发现他们使用主键作为比较的情况。

可以使用unique

ALTER TABLE table ADD UNIQUE (field3);

UNIQUE约束确保列中的所有值都是不同的。

UNIQUE和PRIMARY KEY约束都保证一个列或一组列的唯一性。

一个PRIMARY KEY约束自动有一个UNIQUE约束。

您可以使用带有NOT EXISTS的INSERT来实现这一点例如:

INSERT INTO table (id, field1, field2, field3)
SELECT * FROM (SELECT 1  as id, 'John' as field1, 'Doe' as field2, '12345' as field3) AS tmp
WHERE NOT EXISTS (
SELECT id FROM table WHERE field3 = '12345'
);
INSERT INTO table (id, field1, field2, field3)
SELECT * FROM (SELECT 1  as id, 'Mary' as field1, 'May' as field2, '12345' as field3) AS tmp
WHERE NOT EXISTS (
SELECT id FROM table WHERE field3 = '12345'
);

最新更新