Пользовательские ошибки и конфилкты в SQL и их устранение в базах данных SQLite
Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223
Рубрика SQLite на сайте: http://zametkinapolyah.ru/zametki-o-mysql/sqlite/
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametki_bd
— ON CONFLICT: пользовательские ошибки и конфилкты в SQL
— и их устранение в базах данных SQLite
/*
1. SQL предложение ON CONFLICT не является самостоятельной командой.
2. ON CONFLICT не является частью стандарта SQL.
3. У данного предложения есть два синтаксиса.
4. Синтаксис при создании таблиц.
5. Синтаксис при манипуляции данными.
6. В базах данных SQLite предложение ON CONFLICT – это такое же
ограничение, как, скажем, UNIQUE, NOT NULL, CHECK, PRIMARY KEY и
используется ON CONFLICT как инструкция к действию для СУБД при
возникновении конликтов.
7. ON CONFLICT дает нам пять способов завершения клиентского запроса,
если этот запрос нарушает внутренние правила базы данных.
*/
/*
Не забывайте, что любая SQL операция, манипулирующая данными, за
исключением команды SELECT – это небольшая транзакция. Давайте
теперь посмотрим как может завершаться SQL запрос, породивший
конфликт в базе данных:
1. ROLLBACK:в данном случае библиотека SQLite прервет SQL запрос,
породивший конфликт, а пользователь на экране увидит предупреждение:
SQLITE_CONSTRAINT и произойдет откат транзакции.
2. ABORT: также прерывает выполнение транзакции при обноружении
конфликта, аннулируются изменения, из-за которых конфликт происходит,
но, в то же время, если транзакция состоит из более чем одного предложения,
предыдущие изменения прменяются и при этом транзакция остается активной.
3. FAIL: работает аналогично ABORT, но если вы выполняете UPDATE и
SQLite выполнила успешно 99 модификаций, а на 100 произошел
конфликт, то первые 99 изменения будут применены, а 100 и последующие
изменения выпонены никогда не будут.
4. IGNORE: просто не выполняет предложение, порождающее конфликт,
а все остальные выполняются.
5. REPLACE: один из самых неодназначных способов разрешения конфликта в
базах данных SQLite. Например, если происходит нарушение ограничения
первичного ключа или столба UNIQUE, то алгоритм REPLACE удалит
уже существующие значения, которые конфликтуют с новыми и продолжит
выполнение SQL запросов. Если происходит нарушение ограничения
NOT NULL, то данный алгоритм заменит NULL значения на значение по
умолчанию, заданное при создании таблицы, если такового нет, то
используется алгоритм ABORT. Если происходит нарушение ограничения
CHECK, то REPLACE сработает как ABORT.
*/
/*
Синтаксис заданный для команд манипуляции имеет наивысший
приоритет. А по умолчанию для разрешения конфликтов SQLite
использует алгоритм ABORT
*/
http://sqlite.org/lang_insert.html
http://sqlite.org/lang_update.html
http://sqlite.org/lang_createtable.html
http://sqlite.org/lang_transaction.html
Последние сообщения
127 полезных и бесплатных онлайн академий
24.04.2019