MySQL INSERT IGNORE, не работающий

Вот моя таблица с некоторыми демонстрационными данными

a_id | b_id
------------
  1    225
  2    494
  3    589

Когда я выполняю этот запрос

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')

Это вставляет обе тех строки, когда это, как предполагается, игнорирует вторую пару значения (2, 494)

Никакие индексы не определили, ни один из тех столбцов являются основными.

Что я не знаю?

7
задан HyderA 14 June 2010 в 06:32
поделиться

4 ответа

Из docs :

Если вы используете ключевое слово IGNORE, ошибки, возникающие при выполнении оператора INSERT, вместо этого обрабатываются как предупреждения. Например, без IGNORE строка, которая дублирует существующий индекс UNIQUE или значение PRIMARY KEY в таблице, вызывает ошибку дублирования ключа, и оператор прерывается. При IGNORE строка по-прежнему не вставляется, но ошибка не выдается.

(курсив мой).

Ваша строка не дублирует «существующий УНИКАЛЬНЫЙ индекс или значение ПЕРВИЧНОГО КЛЮЧА», поскольку у вас нет первичного ключа или каких-либо уникальных ограничений.


Если, как вы упомянули в одном из своих комментариев, вы не хотите, чтобы ни одно из полей было уникальным, но вы действительно хотите, чтобы комбинация была уникальной, вам понадобится составной первичный ключ для обоих столбцов (избавьтесь от сначала любые дубликаты):

alter table MYTABLE add primary key (a_id,b_id)
13
ответ дан 6 December 2019 в 11:45
поделиться

Если вы не установите критерий UNIQUE или не установите PRIMARY KEY , MySql не узнает, что ваша новая запись является дубликатом.

3
ответ дан 6 December 2019 в 11:45
поделиться

Если я правильно вас понял, после того, как вы запустите команду вставки, ваша таблица будет выглядеть так

1   225
2   494
3   589
4   230
2   494

Если да, то ответ заключается в том, что дизайн вашей таблицы позволяет дубликаты.

Если вы хотите предотвратить вставку второй записи, вам нужно определить столбец a_id как первичный ключ или уникальный индекс. Если вы это сделаете, тогда оператор игнорирования вставки будет работать так, как вы ожидаете, то есть вставлять записи, игнорировать ошибки, такие как попытка добавить повторяющуюся запись.

0
ответ дан 6 December 2019 в 11:45
поделиться

если нет первичного ключа, то не может быть и дублирующего ключа, который нужно игнорировать. вы всегда должны устанавливать первичный ключ, поэтому сделайте это - и если вы хотите иметь дополнительные столбцы, которые не должны дублироваться, установите их как "уникальные".

1
ответ дан 6 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: