Как удалить связь между таблицами sql
Чтобы удалить связь между таблицами в SQL, нужно использовать оператор ALTER TABLE и удалить внешний ключ, который связывает две таблицы.
Вот пример SQL запроса для удаления внешнего ключа «fk_column» из таблицы «my_table» :
ALTER TABLE my_table DROP CONSTRAINT fk_column;
В этом примере оператор ALTER TABLE используется для изменения таблицы «my_table» , а ключевое слово DROP CONSTRAINT указывает на то, что необходимо удалить внешний ключ из таблицы.
Обратите внимание, что при удалении внешнего ключа могут потребоваться изменения в других таблицах, связанных с этим ключом. В зависимости от структуры базы данных, может потребоваться удалить или изменить соответствующие записи в связанных таблицах, чтобы сохранить целостность данных.
Как удалить связь между таблицами в mysql



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2024. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Ссылочная целостность: внешний ключ (FOREIGN KEY) стр. 3
Для удаления ограничения также используется оператор ALTER TABLE :
Вот где нам понадобилось имя ограничения! Давайте удалим внешний ключ из таблицы PC.
Примечание:
При удалении внешнего ключа сами столбцы не удаляются, удаляется лишь ограничение. Это также справедливо и для других ограничений.
Создадим теперь новое ограничение, использующее каскадное удаление:
4. Изменение значений столбцов в главной таблице, с которыми связан внешний ключ в подчиненной таблице, т.е. тех столбцов, которые указаны в предложении REFERENCES ограничения FOREIGN KEY . Здесь действуют те же варианты, что и в случае с удалением строки из главной таблицы, только опция вводится предложением
При помощи внешнего ключа, как и других ограничений, мы моделируем связи, которые существуют в предметной области. Поэтому выбор опций определяется именно предметной областью. В нашем случае при изменении номера модели в таблице Product естественно создать ограничение с опцией CASCADE , чтобы это изменение проникало в продукционные таблицы, удаляя изделия аннулированной модели, т.е. для таблицы PC нам следует написать:
Однако для другой предметной области каскадное удаление может привести к ошибочной потере данных. Пусть, например, для таблиц Сотрудники и Отделы существует связь по номеру отдела. Если при удалении (расформировании) отдела сотрудники не увольняются, а переводятся в другие отделы, то каскадное удаление ошибочно привело бы к удалению информации о сотрудниках, работавших в этом отделе. Здесь подошел бы вариант NO ACTION – чтобы сначала распределить сотрудников по другим отделам, а потом удалить «пустой» отдел; или вариант SET NULL, т.е. сначала удаляем отдел, а потом занимаемся трудоустройством сотрудников, не приписанных ни к какому отделу. Еще раз повторю, что выбор варианта зависит не от предпочтений программиста, а от процессов, имеющих место в реальном мире.
1. Между таблицами Product и PC выше мы реализовали связь «один ко многим». Связь «один к одному» создается в случае, когда в подчиненной таблице внешним ключом является уникальный столбец или уникальная комбинация столбцов. В ряде случаев связь «один к одному» является ошибкой проектирования, поскольку фактически одна сущность разбивается на две. Однако для такого разделения иногда имеются веские основания, например, когда с целью повышения производительности или обеспечения безопасности приходится выполнить вертикальное секционирование (partitioning) таблицы.
2. При удалении ограничения необходимо знать его имя. Однако, как мы уже знаем, можно создать ограничение, не давая ему имени. Как быть в этом случае? Если мы явно не указываем имя ограничения, его генерирует система. Поэтому имя всегда есть. Другой вопрос, что мы его не знаем. Тут уместно сказать, что в реляционных системах метаданные хранятся так же, как и данные, т.е. в таблицах. Стандартным представлением метаданных является информационная схема, к которой можно адресовать обычные запросы на выборку. Не углубляясь в детали, напишем запрос, который вернет нам имя ограничения внешнего ключа для таблицы PC:
mysql. Удалить таблицу, которая имеет связь с внешним ключем (foreign_key)
Данный материал предоставлен сайтом PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Если таблица базы данных, имеет связь с другой таблицей с помощью внешнего ключа, то ее как правило нельзя так просто удалить.
Скорее всего вы получите подобное сообщение об ошибке:
Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails
Сперва необходимо избавиться от внешнего ключа и только после этого удалить саму таблицу.

Данный вариант избавление от связки ключей не является безопасным, так как может привести к поломке базы данных! Если вы решили им воспользоваться, то используйте на свой страх и риск!
Избавиться от связки внешних ключей можно следующим образом:
Устанавливаем соединение с базой данных и выполняем следующий запрос:
news — название таблицы для примера, вместо нее укажите название ВАШЕЙ таблицы!
SET FOREIGN_KEY_CHECKS=0; DROP TABLE news; SET FOREIGN_KEY_CHECKS=1;
Если вы знаете примеры лучше, то можете поделиться ими в комментариях или создать новость.
Пояснение по запросу:
SET FOREIGN_KEY_CHECKS=0; — Отключает ограничение в БД по внешнему ключу.
DROP TABLE news; — Удаляет таблицу news.
SET FOREIGN_KEY_CHECKS=1; — Возвращает ограничение в БД по внешнему ключу.
Проведя данные манипуляции мы отключаем связи по внешнему ключу для всей БД.
Удаляем ту таблицу, которую мы хотели удалить.
И снова включаем связи по внешнему ключу для всей БД.