在插入之前检查SQL表中是否存在具有相同唯一ID的记录

时间:2013-06-22 13:30:11

标签: mysql sql

如何检查表中是否有另一条记录具有相同的唯一ID(列名为ID),然后如果存在没有做任何事情,否则插入记录?

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

3 个答案:

答案 0 :(得分:3)

一种选择是使用INSERT IGNORE。顾名思义,它将INSERT不存在的行,并且它将对重复的行无效。

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 Fiddle Demo

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

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

答案 1 :(得分:1)

您可以将REPLACE用作INSERT OR UPDATE

答案 2 :(得分:1)

如果您想要将其更改为在存在id alreadt时也执行某些操作,请参阅以下片段:

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

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