Блог Синявского
  • Разделы
  • Метки
  • Все статьи

Отключение проверки внешних ключей

1

В реляционных базах данных при условии третьей нормальной формы есть связи между записями. Взаимосвязи обеспечиваются в базе дынных MySQL с помощью специальных ключей primary keys, foreign keys, foreign key constraints, индексами и др. Также в базе данных есть система проверки целостности.

При необходимости удалить какую-либо запись происходит проверка взаимосвязей. Если в результате этой проверки будут найдены дочерние записи произойдет ошибка. Вначале нужно избавится от дочерних записей. Что делать если в конкретной ситуации их не нужно удалять? Например: Изменили схему базы данных в приложении и нужно мигрировать данные. Писать процедуру миграции на этапе начальной разработки совсем не эффективно. В этот момент может пригодиться в некоторых случаях следующая последовательность действий:

  1. Удалить базу данных;
  2. Cоздать базу;
  3. Восстановить данные из дампа.

Ошибка проверки внешних ключей при удалении записи из базы данных или при удалении таблицы:

Cannot delete or update a parent row: a foreign key constraint fails

Решение этой проблемы - отключение проверки внешних ключей.

SET foreign_key_checks = 0;
DROP TABLE <table_name>;
SET foreign_key_checks = 1;

Чтобы проверка не происходила вовсе можно просто удалить связи. Без индексов и связей база данных будет работать крайне медленно (безумная идея).

ALTER TABLE <table_name> DROP FOREIGN KEY <foreign_key_name>

Полный синтаксис ALTER TABLE



  • ← сюда
  • туда →

comments powered by Disqus

Опубликовано

16.03.2014

Обновление

17.07.2017

Категории

mysql

Тэги

  • mysql 7

Всегда на связи

  • Блог Синявского - Ничего не переносить на завтра, это тоже проблема с прокастинацией?
  • © Алексей Синявский, по лицензии CC BY-SA если не указано иное.
  • С использованием Pelican. Тема: Elegant от Talha Mansoor