INSERT IGNORE не работает с auto_increment - PullRequest
0 голосов
/ 05 июня 2018

Моя цель - выполнить вставку SQL, только если того же значения не существует.

это моя таблица1:

id(auto_increment)
version(string)

Мой запрос выглядит так:

INSERT IGNORE INTO table1 (version) VALUES ('12345');

Проблема в том, что оператор ignore не работает, потому что каждая строка отличается из-за столбца id (auto_increment).

У кого-нибудь здесь есть решение, позволяющее избежать двойного сохранения одинаковых значений?

Решение:

INSERT INTO table1 (version)
SELECT * FROM (SELECT '12345') AS tmp
WHERE NOT EXISTS (
    SELECT version FROM table1 WHERE version = '12345'
) LIMIT 1;

1 Ответ

0 голосов
/ 05 июня 2018

Ваша проблема не имеет ничего общего с автоматически увеличивающимся столбцом.

Вам необходимо уникальное ограничение / индекс для version:

alter table table1 constraint unq_table1_version unique (version);

Я также не рекомендую insert ignore для этой цели.Это может игнорировать другие ошибки.Вместо этого используйте on duplicate key update:

insert into table1 (version) 
    values ('12345')
    on duplicate key update version = values(version);  -- this is a no-op
...