假设我有这两个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'
);