2013-06-22 3 views
2

Как проверить, есть ли в таблице другая запись с тем же уникальным идентификатором (имя столбца равно ID), а затем, если он существует, ничего не делает , иначе вставить запись?Проверьте, существует ли запись с тем же уникальным идентификатором в таблице SQL перед вставкой

Нужно ли индексировать столбец ID и установить его как уникальный/первичный ключ?

+0

1) использовать 'вставить в (ключом1, ...) значению1 ... где не существует (выберите 1 из a where key1 = value1) '2) вы не указали _need_ индекс, но это, безусловно, поможет ... – wildplasser

ответ

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

Вы можете использовать REPLACE в INSERT OR UPDATE для этого

+1

Не уверен, что именно этого хочет OP, так как эти операции * будут * изменять данные. OP не хочет ничего, если идентификатор уже существует. –

1

В случае, если вы хотите изменить его и сделать что-то, когда alreadt идентификатор существует, вот фрагмент кода:

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

Так что, если ключ уже существует он будет обновлять все после on duplicate key, иначе он будет вставлять все, что есть до этого.