Задает алгоритм разрешения конфликта
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 задает алгоритм разрешения конфликтов ограничений:
SQLITE_CONSTRAINT
. В отсутствие активных транзакций (помимо неявных транзакций, которые создаются при выполнении каждой команды) этот алгоритм действует так же, как ABORT. SQLITE_CONSTRAINT
. Откат не выполняется, поэтому изменения, которые были внесены предшествующими командами транзакции, сохраняются. Этот алгоритм используется по умолчанию. SQLITE_CONSTRAINT
, а все изменения, которые были внесены в базу данных до нарушения, сохраняются. Например, если при выполнении оператора UPDATE произошло нарушение ограничения в 100-й строке, первые 99 строк обновляются, а строки, начиная с 100-й, сохраняются в прежнем виде. NULL
заменяется значением по умолчанию соответствующего столбца. Если у столбца отсутствует значение по умолчанию, применяется алгоритм ABORT. При нарушении ограничения CHECK применяется алгоритм IGNORE. Алгоритм, который указан в условии OR команды INSERT или UPDATE, имеет приоритет над алгоритмом, заданным в операторе CREATE TABLE. Если алгоритм не задан ни в одном из операторов, применяется алгоритм ABORT.
Выражения в SQL запросах, Ключевые слова, поддерживаемые QDB
Предыдущий раздел: перейти