Вставка записей в Mysql со значениями INSERT IGNORE и NULL - PullRequest
2 голосов
/ 10 июня 2010

У меня есть секционированная таблица InnoDB с несколькими полями. Я пытаюсь избежать дубликатов при вставке.

Допустим,

Field1 int null
Field2 int null
Field3 int null
Field4 int null
Field5 int null

Я создал УНИКАЛЬНЫЙ индекс для этих полей. Я пытаюсь вставить некоторые записи со значениями NULL, а затем снова вставить их с помощью функции IGNORE на MySql.

К сожалению, похоже, что реплицируются записи при использовании значений NULL. Если я попытаюсь использовать нули вместо NULL, все будет работать, но там мне нужны нули.

Есть идеи?

1 Ответ

6 голосов
/ 10 июня 2010

Так работает NULL. Имейте в виду, что результатом сравнения на равенство двух значений NULL является NULL (что в логических выражениях оценивается как FALSE). Таким образом, даже если у вас есть уникальное ограничение для столбца Field1, которое допускает значение NULL, таблица может содержать более 1 записи, где значение Field1 равно NULL. Если вы хотите обрабатывать NULL по-другому, в дополнение к уникальному ограничению вам нужно написать триггеры BEFORE INSERT / UPDATE, которые проверяют, есть ли запись в таблице, где Field1 IS NULL (и выдают ошибку, чтобы предотвратить обновление).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...