Удаление связей внешнего ключа
Ограничение внешнего ключа в SQL Server можно удалить с помощью SQL Server Management Studio или Transact-SQL. При удалении ограничения внешнего ключа удаляется требование принудительного создания ссылочной целостности.
Ссылки на внешние ключи в других таблицах см. в разделе «Ограничения первичного и внешнего ключа».
Разрешения
Требуется разрешение ALTER на таблицу.
Использование SQL Server Management Studio
Удаление ограничения внешнего ключа
- Разверните в обозревателе объектовтаблицу с ограничением, после чего разверните узел Ключи.
- Щелкните правой кнопкой мыши ограничение и нажмите кнопку «Удалить«.
- В диалоговом окне «Удалить объект» нажмите кнопку «ОК«.
Использование Transact-SQL
Удаление ограничения внешнего ключа
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На стандартной панели выберите пункт Создать запрос.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO ALTER TABLE dbo.DocExe DROP CONSTRAINT FK_Column_B; GO
Дополнительные сведения см. в разделе ALTER TABLE (Transact-SQL).
Следующие шаги
- Инструкция ALTER TABLE (Transact-SQL)
- sys.key_constraints (Transact-SQL)
- Создание связей по внешнему ключу
- Изменение связей по внешнему ключу
Drop a Foreign Key SQL Server
В этом учебном пособии вы узнаете, как удалять внешний ключа в SQL Server (Transact-SQL) с синтаксисом и примерами.
Описание
После создания foreign key, вам может быть понадобится удалить foreign key из таблицы. Вы можете сделать это с помощью оператора ALTER TABLE в SQL Server (Transact-SQL).
Синтаксис
Синтаксис удаления внешнего ключа в SQL Server (Transact-SQL):
ALTER TABLE table_name
DROP CONSTRAINT fk_name;
Параметры или аргументы
table_name — имя таблицы, в которой был создан внешний ключ.
fk_name — имя внешнего ключа, который вы хотите удалить.
Пример
Рассмотрим пример того, как удалить внешний ключ в SQL Server (Transact-SQL).
Например, если вы создали внешний ключ следующим образом:
Transact-SQL
CREATE TABLE products
( product_id INT PRIMARY KEY ,
product_name VARCHAR ( 50 ) NOT NULL ,
category VARCHAR ( 25 )
CREATE TABLE inventory
( inventory_id INT PRIMARY KEY ,
product_id INT NOT NULL ,
quantity INT ,
min_level INT ,
max_level INT ,
CONSTRAINT fk_inv_product_id
FOREIGN KEY ( product_id )
REFERENCES products ( product_id )
В этом примере внешнего ключа мы создали родительскую таблицу products . Таблица products имеет первичный ключ, который состоит из поля product_id .
Затем мы создали вторую таблицу под названием inventory , которая в этом примере внешнего ключа будет дочерней таблицей. Мы использовали оператор CREATE TABLE для создания внешнего ключа fk_inv_product_id в таблице inventory . Внешний ключ устанавливает связь между столбцом product_id в таблице inventory и столбцом product_id в таблице products .
Если необходимо удалить внешний ключ с наименованием fk_inv_product_id , то нужно выполнить следующую команду:
MySQL Удаление записей из нескольких связанных таблиц
Роман Protocol
29.11.2018
Всем привет!
Написал запросы на MySQL для пакетного удаления строк из нескольких связанных таблиц. Нужно удалить все записи, что относятся к профессии по переданному id.
1 вариант
DELETE Records,
Exe_service,
List_of_service,
List_of_master_service,
Professions_List
FROM Records
RIGHT JOIN Exe_service
ON Records.Exe_service_Executors_idExecutors = Exe_service.Executors_idExecutors
RIGHT JOIN List_of_service
ON Exe_service.List_of_service_idList_of_service = List_of_service.idList_of_service
RIGHT JOIN List_of_master_service
ON List_of_service.List_of_master_service_idList_of_master_service = List_of_master_service.idList_of_master_service
RIGHT JOIN Professions_List
ON List_of_master_service.Professions_List_idProfessions_List = Professions_List.idProfessions_List
WHERE Professions_List.idProfessions_List = :idProf
2 вариант
DELETE Professions_List,
List_of_master_service,
List_of_service,
Exe_service,
Records
FROM Professions_List
LEFT JOIN List_of_master_service
ON Professions_List.idProfessions_List = List_of_master_service.Professions_List_idProfessions_List
LEFT JOIN List_of_service
ON List_of_master_service.idList_of_master_service = List_of_service.List_of_master_service_idList_of_master_service
LEFT JOIN Exe_service
ON List_of_service.idList_of_service = Exe_service.List_of_service_idList_of_service
LEFT JOIN Records
ON Exe_service.Executors_idExecutors = Records.Exe_service_Executors_idExecutors
WHERE Professions_List.idProfessions_List = :idProf
В обоих случаях выдаётся ошибка: #1451 — Cannot delete or update a parent row: a foreign key constraint fails (‘vistae0f_roma’.’List_of_master_service’, CONSTRAINT ‘List_of_master_service_ibfk_1’ FOREIGN KEY (‘Professions_List_idProfessions_List’) REFERENCES ‘Professions_List’ (‘idProfessions_List’) ON)
Я понимаю, что там ключ связан, но удалить как-то надо.
Я не пойму как правильно запрос выстроить, чтобы сразу удалялось из таблиц связанные строки.
Спасибо за ответы!
Иван Иванов
29.11.2018
Ну если Records — это таблица с Primary Key, то удалять запись из неё надо в последнюю очередь. В принципе, второй запрос должен работать…
Ну и как всегда, костыльное решение: сохранять id удаляемого объекта, удалять объект из одной таблицы запросом, потом находить запись в другой таблице по этому id, снова удалять и тп. Работать будет крайне медленно, но хоть что-то))
Андрей
29.11.2018
лучший ответ Если у тебя внешние ключи с ON DELETE CASCADE, то при удалении записи из главной таблицы НЕ надо явно удалять записи из подчинённых таблиц. Все связанные записи из подчинённых таблиц будут удалены автоматически.
Даниил Казнин
01.12.2018
Помогите решил сделать свое сервер самп, я начал загружать БД и там ошибка
Даниил Казнин Ученик (103), Вопрос открыт 3 минуты назад
Ошибка
SQL-запрос:
‘ID’ INT( 11 ) NOT NULL,
‘Name’ VARCHAR( 24 ) NOT NULL,
‘Data’ DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
‘nakaz’ VARCHAR( 24 ) CHARACTER SET cp1251 NOT NULL,
‘Names’ VARCHAR( 24 ) CHARACTER SET cp1251 NOT NULL,
‘reason’ VARCHAR( 100 ) CHARACTER SET cp1251 NOT NULL
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
Ответ MySQL: Документация
#1067 — Invalid default value for ‘Data’
- MySQL: Удаление данных из связанных таблиц
- Как сделать случайный выбор одной/нескольких строк из двух/нескольких таблиц в базе mysql
- В чём прикол связанных таблиц MySQL?
- MySQL. Лучше 10 000 000 таблиц по 10 записей или 1 таблица со 100 млн. Записей
- Помогите собрать sql запрос на вывод данных из связанных таблиц
Как удалить связь между таблицами в mysql



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

Public user contributions licensed under cc-wiki license with attribution required
