Jam*_*mes 6 mysql insert unique-constraint
如果我INSERT只在主键尚不存在时才想要一行,INSERT直接执行并在重复的情况下忽略错误是否更有效/更简单,还是应该始终先运行SELECT以检查它是否已经存在?
您可以使用 WHERE NOT EXISTS 在插入新记录之前检查新值。
INSERT INTO <table>
(
field1, field2, field3
)
SELECT value1, value2, value3
FROM dual
WHERE NOT EXISTS (SELECT 1
FROM <table>
WHERE <pk fields> = <new values>);
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)CREATE TABLE foo(id int, v1 int, v2 int); INSERT INTO foo VALUES (1, 100,100); INSERT INTO foo VALUES (2, 200, 200);
此记录存在且不应插入:
Run Code Online (Sandbox Code Playgroud)INSERT INTO foo (id, v1, v2) SELECT 1, 101, 101 FROM dual WHERE NOT EXISTS (SELECT 1 FROM foo WHERE id=1);
这是一个新记录:
Run Code Online (Sandbox Code Playgroud)INSERT INTO foo (id, v1, v2) SELECT 3, 300, 300 FROM dual WHERE NOT EXISTS (SELECT 1 FROM foo WHERE id=3);
最终结果:
Run Code Online (Sandbox Code Playgroud)SELECT * FROM foo;身份证 | v1 | v2 -: | --: | ——: 1 | 100 | 100 2 | 200 | 200 3 | 300 | 300
dbfiddle在这里