如何检查表中是否存在具有相同唯一 ID 的另一条记录(列名称为ID
),如果存在则不执行任何操作,否则插入记录?
我是否需要索引该ID
列并将其设置为唯一/主键?
一种选择是使用INSERT IGNORE
. 顾名思义,它将插入不存在的行,并且不会对重复的行执行任何操作。
CREATE TABLE Table1 (
`id` int NOT NULL PRIMARY KEY,
`foo` varchar(20)
);
INSERT IGNORE INTO Table1
(`id`, `foo`)
VALUES
(1, 'a'),
(2, 'a'),
(3, 'a'),
(4, 'a'),
(1, 'a'),
(2, 'a'),
(1, 'a');
以上将仅插入前 4 行。最后 3 行没有插入,因为它们有重复的键。
INSERT IGNORE
要求您具有主键或唯一索引。
有关INSERT IGNORE
(以及处理重复项的其他方法)的更多信息:MySQL 处理重复项
你可以REPLACE
使用INSERT OR UPDATE
那个
如果您想在 id alreadt 存在时更改它以执行某些操作,这里有一个片段:
INSERT INTO table (key1, ...) VALUES (value1, ...) ON DUPLICATE KEY UPDATE dosomethingelse
因此,如果密钥已经存在,它将更新之后的任何内容on duplicate key
,否则它将插入之前的任何内容。