Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Программные интерфейсы общего назначения > Прикладные библиотеки и технологии > Библиотека менеджера QDB > Справочник по командам SQL, поддерживаемым менеджером QDB > SQL: ON CONFLICT



SQL: ON CONFLICT

Задает алгоритм разрешения конфликта

Прототип:

ON CONFLICT {ROLLBACK | ABORT | FAIL | IGNORE | REPLACE}

Описание:

ON CONFLICT является не командой, а условием, которое может входить в состав многих других команд SQL. Этому условию посвящен отдельный раздел настоящего руководства, поскольку оно не предусмотрено стандартом SQL и может быть незнакомым для разработчиков.

Синтаксис условия ON CONFLICT совпадает с синтаксисом команды CREATE TABLE. В командах INSERT и UPDATE вместо ключевых слов ON CONFLICT используется ключевое слово OR, которое придает их синтаксису более естественный вид. Например, вместо INSERT ON CONFLICT IGNORE используется конструкция INSERT OR IGNORE. Несмотря на различие в ключевых словах, смысл условия сохраняется.

Условие ON CONFLICT задает алгоритм разрешения конфликтов ограничений:

ROLLBACK
При нарушении ограничения текущая транзакция немедленно прерывается, выполняется ее откат, а команда завершается с кодом SQLITE_CONSTRAINT. В отсутствие активных транзакций (помимо неявных транзакций, которые создаются при выполнении каждой команды) этот алгоритм действует так же, как ABORT.
ABORT
При нарушении ограничения команда отменяет все внесенные ранее изменения и завершается с кодом SQLITE_CONSTRAINT. Откат не выполняется, поэтому изменения, которые были внесены предшествующими командами транзакции, сохраняются. Этот алгоритм используется по умолчанию.
FAIL
При нарушении ограничения команда завершается с кодом SQLITE_CONSTRAINT, а все изменения, которые были внесены в базу данных до нарушения, сохраняются. Например, если при выполнении оператора UPDATE произошло нарушение ограничения в 100-й строке, первые 99 строк обновляются, а строки, начиная с 100-й, сохраняются в прежнем виде.
IGNORE
Строка, которая нарушает ограничение, не вставляется и не изменяется, но команда продолжает выполняться в обычном режиме. Все остальные строки вставляются и изменяются без ошибок.
REPLACE
При нарушении ограничения UNIQUE существующие строки, которые участвуют в конфликте, удаляются перед вставкой или обновлением текущей строки. Вставка или обновление завершаются успешно, а команда продолжает выполняться в обычном режиме. без ошибок. При нарушении ограничения NOT NULL значение NULL заменяется значением по умолчанию соответствующего столбца. Если у столбца отсутствует значение по умолчанию, применяется алгоритм ABORT. При нарушении ограничения CHECK применяется алгоритм IGNORE.

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

Алгоритм, который указан в условии OR команды INSERT или UPDATE, имеет приоритет над алгоритмом, заданным в операторе CREATE TABLE. Если алгоритм не задан ни в одном из операторов, применяется алгоритм ABORT.

Тематические ссылки:

Выражения в SQL запросах, Ключевые слова, поддерживаемые QDB




Предыдущий раздел: перейти