Каскадне видалення даних в базах даних sqlite
Частина 11.6: Каскадне видалення даних в базах даних SQLite
Привіт, відвідувач сайту ZametkiNaPolyah.ru. Продовжуємо вивчати бази даних і наше знайомство з бібліотекою SQLite3. Минула публікація була про каскадну модифікацію, в цій ми з вами поговоримо про каскадне видалення даних з бази даних SQLite3. Каскадне видалення даних це спосіб видалити дані з пов'язаних таблиць і при цьому не порушити обмеження зовнішнього ключа, крім того, каскадне видалення даних спрощує нам роботу при видаленні рядків в зв'язаних таблицях.

Каскадне видалення даних в базах даних SQLite
З цього запису ви дізнаєтеся для чого потрібно каскадне видалення даних в реляційних базах даних і, як каскадне видалення полегшує життя розробнику. І побачите приклад роботи каскадного видалення даних з бази даних під управлінням SQLite в таблицях, пов'язаних зв'язком багато до багатьох, в загальному, побачите в дію конструкцію ON DELETE CASCADE.
Каскадне видалення даних з бази даних SQLite
При реалізації зв'язків між таблицями за допомогою зовнішнього ключа або FOREIGN KEY ми стикаємося з такою проблемою: для видалення даних з таблиць бази даних нам необхідно виконати дві команди DELETE: спершу потрібно видалити дані з таблиці довідника, а потім видалити рядок з таблиці, яка посилається на довідник. В іншому випадку SQLite скаже, що було порушено обмеження зовнішнього ключа і не дасть видалити дані.
Щоб уникнути такої проблеми і не писати зайві SQL запити в SQLite було реалізовано каскадне видалення даних з таблиць. при каскадному видалення даних ми не пишемо зайвий SQL запит DELETE, а також гарантуємо собі те, що цілісність даних в базах даних не буде порушена.
Операція каскадного видалення даних реалізується за допомогою ключової фрази ON DELETE CASCADE. Фраза ON DELETE CASCADE говорить SQLite про те, що спершу потрібно видалити дані з довідника або домену даних, а потім дані потрібно видаляти з таблиці, яка посилається на цей довідник.
Щоб реалізувати каскадне видалення даних з таблиці бази даних, потрібно записати правило ON DELETE відразу після FOREIGN KEY, тоді SQLite почне «розуміти», що при видаленні даних з довідника, їй потрібно видаляти і дані з пов'язаних таблиць.
Давайте реалізуємо приклад зв'язку багато до багатьох і подивимося, як відбувається каскадне видалення даних з бази даних SQLite3 і зрозуміємо, як працює конструкція ON DELETE CASCADE.
Приклади каскадного видалення даних з бази даних SQLite. ON DELETE в SQLite3
Щоб подивитися, як видалити дані каскадом. давайте створимо три таблиці в базі даних. які будуть пов'язані зв'язком багато до багатьох, скористаємося командою CREATE:
Ми розглянули каскадне видалення даних з бази даних SQLite. яка реалізується за допомогою ключового слова ON DELETE CASCADE. По-перше, каскадне видалення даних зменшує кількість SQL запитів. По-друге, конструкція ON DELETE CASADE дозволяє видаляти дані з таблиці не порушуючи обмеження зовнішнього ключа.
Трохи про те, як створювати сайти і як просувати сайт:
Рекомендую подивитися і почитати:
Бази даних SQLite і без того орієнтовані на підтримку цілісності даних і обожнюють інсерти з усіх інших запитів, так як кожна операція в базі даних - це мінітранзакція, яка замаскована під звичайний запит.
І дійсно каскадне видалення даних потрібно застосовувати і застосовувати правильно, що б не дай Бог не порушити структуру зберігання даних, інакше довго доведеться возитися з резервних копій!
Не зовсім зрозуміла, чим відрізняється каскадне видалення даних від звичайного видалення, адже і те і інше виконується оператором DELETE, поясніть?
Олечка, і каскадне видалення даних з бази даних і звичайне видалення даних з бази даних дійсно виконується командою DELETE, але різниця в тому, що:
1. Ви не зможете реалізувати каскадне видалення даних, якщо ваші таблиці не будуть зв'язані обмеження зовнішнього ключа.
2. Каскадне видалення даних реалізується тільки в тому випадку, якщо воно задано для пов'язаних стовпців конструкцією ON DELETE CASCADE.
3. Каскадне видалення дозволяє не порушувати правила зовнішнього ключа за рахунок того, що SQLite перевірить пов'язані стовпці і видалить потрібні рядки в обох таблицях.
4. При звичайному видалення даних в зв'язаних таблицях вам спершу доведеться видалити дані з таблиці, яка посилається на довідник, а потім видаляти дані з довідника. Тим самим ви замість одного запиту робите два.
Доброго дня. У тексті статті вказано:
«Спершу потрібно видалити дані з таблиці довідника, а потім видалити рядок з таблиці, яка посилається на довідник».
Здається, що тут очепятка.