Задать вопрос
@shnegs
стандартный

Какие ограничения несёт в себе INSERT IGNORE для секционированных таблиц?

Здравствуйте!
Нужно игнорировать дублирующиеся данные. Буду делать INSERT IGNORE
помогите понять документацию MySQL.
When INSERT IGNORE is used, the insert operation fails silently for rows containing the unmatched value, but inserts rows that are matched.

Не могу толком понять эту фразу. Чем грозит IGNORE для секционированных таблиц?
  • Вопрос задан
  • 1666 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
INSERT INTO может привести к ошибке. По любой причине. При этом процесс вставки прерывается, а все уже внесённые в таблицы изменения - откатываются.

INSERT IGNORE преобразует ошибку в предупреждение. При этом выполнение запроса продолжается, а запись, попытка вставки которой привела к ошибке, не вставляется.

Замечание. Дублирование - не единственное событие, которое может вызвать ошибку. Может быть ещё куча причин (CHECK constraint, SIGNAL из триггера, нарушение внешнего ключа и т.п.). Причём далеко не все типы ошибок восстановимы и могут быть проигнорированы/преобразованы в предупреждение. Если ошибка невосстановимая (как правило, это системные или внешние ошибки) - запрос прерывается по ошибке и откатывается обычным образом.

Замечание 2. Всё вышеописанное никак не пересекается с секционированием. За исключением случая, когда значение поля не соответствует диапазону ни для одной из секций. В этом случае IGNORE срабатывает штатно - ошибка преобразуется в предупреждение, проблемная запись не вставляется.

Нужно игнорировать дублирующиеся данные. Буду делать INSERT IGNORE

Кроме INSERT IGNORE INTO есть ещё два типа запросов, которые обрабатывают ошибку дублирования данных - это INSERT .. ON DUPLICATE KEY UPDATE и REPLACE INTO. Изучите их - возможно, какой-то из них лучше подходит для Вашей конкретной задачи. При этом REPLACE не поддерживает модификатор IGNORE и не может игнорировать другие ошибки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xez
@xez
TL Junior Roo
INSERT IGNORE просто не выдаст ошибку при вставке (если такая возможна).
Проблема с дублированием данных решается констрейнтами.
Все.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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