![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
В большинстве баз данных SQL, если у вас есть огаринчение
UNIQUE,
NOT NULL или
CHECK на таблице
и вы пытаетесь сделать UPDATE или
INSERT , который нарушает ограничение, база
данных прервет происходящую операцию, отменит любые предшествующие изменения,
связанные с тем же самым оператором UPDATE или INSERT, и возвратит ошибку.
Это поведение по умолчанию SQLite, хотя SQLite также позволяет определять
альтернативные пути к контакту с ограничительными нарушениями.
Эта статья описывает те альтернативы и как использовать их. SQLite определяет пять алгоритмов разрешения ограничительных
конфликтов следующим образом: Когда ограничительное нарушение происходит, непосредственный ROLLBACK
происходит, таким образом заканчивая текущую транзакцию
и аварийно прекращая работу команды с кодом возврата SQLITE_CONSTRAINT.
Если никакая транзакция не активна (кроме подразумеваемой, которая создается
по каждой команде), тогда этот алгоритм работы то же самое, как ABORT. Когда ограничительное нарушение происходит, команда отменяет
любые предшествующие изменения, которые это, возможно, внесло и аварийно
прекращает работы с кодом возврата SQLITE_CONSTRAINT. Но никакой ROLLBACK не
выполняется, так что изменения от предшествующих команд в той же самой
транзакции сохранены. Это поведение по умолчанию для SQLite. Когда ограничительное нарушение происходит, аварийно прекращает работу
команды с кодом возврата SQLITE_CONSTRAINT.
Но любые изменения базы данных, что команда сделала до столкновения с
ограничительным нарушением, сохранены и не отменяются.
Например, если UPDATE столкнулось с ограничительным нарушением на 100-й
строке, которую оно пытается обновить, первые 99 изменений
сохранены, но изменения строки 100 и далее никогда не происходят. Когда ограничительное нарушение происходит, строка,
которая содержит ограничительное нарушение, не вставляется или изменяется.
Но команда продолжает выполняться как обычно.
Другие строки прежде и после строки, которая содержала ограничительное
нарушение, продолжают вставляться или обновляться как обычно.
Никакая ошибка не возвращена. Когда нарушение ограничения UNIQUE происходит, существующяя
ранее строка, которая вызвала ограничительное нарушение, удалена до вставки
или обновления текущей строки. Таким образом вставка или обновление всегда
происходят. Команда продолжает выполняться как обычно.
Никакая ошибка не возвращена.
Choose any three.
Ограничительное разрешение конфликтов в SQLite
Алгоритмы разрешения конфликтов