2

如何检查表中是否存在具有相同唯一 ID 的另一条记录(列名称为ID),如果存在则不执行任何操作,否则插入记录?

我是否需要索引该ID列并将其设置为唯一/主键?

4

3 回答 3

3

一种选择是使用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 行没有插入,因为它们有重复的键。

SQL 小提琴演示

INSERT IGNORE要求您具有主键或唯一索引。

有关INSERT IGNORE(以及处理重复项的其他方法)的更多信息:MySQL 处理重复项

于 2013-06-22T13:50:20.667 回答
1

你可以REPLACE使用INSERT OR UPDATE那个

于 2013-06-22T13:33:48.773 回答
1

如果您想在 id alreadt 存在时更改它以执行某些操作,这里有一个片段:

INSERT INTO table (key1, ...) VALUES (value1, ...) ON DUPLICATE KEY UPDATE dosomethingelse

因此,如果密钥已经存在,它将更新之后的任何内容on duplicate key,否则它将插入之前的任何内容。

于 2013-06-22T13:42:51.910 回答