Удалил конкретный идентификатор из разных таблиц - PullRequest
0 голосов
/ 09 января 2019

Я хотел бы удалить определенные идентификаторы из разных таблиц, чтобы удалить эти значения.

Мой отформатированный вопрос:

Землетрясение! Калифорния погружается в океан, и все наши поставщики в Калифорнии исчезают под водой. Напишите запрос, чтобы удалить их из базы данных. Что происходит при выполнении запроса, если вы объявили внешний ключ? Что произойдет, если вы не объявили внешний ключ?

Проблема в том, что я не знаю, как справиться с этим

Я ожидаю, что он удалит все столбцы с идентификатором "California". Одним из них является то, что Калифорния упоминается несколько раз с разными идентификаторами, потому что есть разные города из Калифорнии, такие как "Лос-Анджелес" и "Сан-Франциско"

Edit:

Таблицы, содержащие города / штаты

Table Supplier with columns city and state

Table Item with column Supplier(Id of table Supplier)

1 Ответ

0 голосов
/ 09 января 2019

Если у вас не включено каскадное удаление, то сначала вы должны удалить из таблицы элементов все строки, которые относятся к калифорнийским поставщикам. Если сначала попытаться удалить поставщиков, произойдет сбой для всех поставщиков, на которые есть ссылки в таблице Item, поскольку это нарушит ограничение внешнего ключа. Ограничение обеспечивает целостность данных и гарантирует, что записи в таблице Item не могут содержать потерянные / несуществующие идентификаторы поставщиков.

Так что, если "Калифорния" - это код штата 20, вы можете запустить:

DELETE FROM Item where Supplier IN (SELECT ID FROM Supplier WHERE State = 20)

, а затем

DELETE FROM Supplier WHERE State = 20

, и он удалит все строки Предмета, которые связаны с калифорнийским поставщиком, а затем все Поставщики.

И, конечно, если Калифорния больше не существует, вы можете также захотеть DELETE FROM States where ID = 20. (Здесь я предполагаю, что у вас есть правильно нормализованная база данных с таблицей состояний, которая вам действительно нужна, вместо того, чтобы дублировать описание состояний каждый раз в таблице поставщиков).

Однако, если вам нужно определить свой внешний ключ (и) с помощью ON DELETE CASCADE), т.е. «каскадное удаление», тогда вы можете просто запустить команду удаления непосредственно для таблицы поставщиков (или даже для таблицы «Состояния», если она у вас есть), и она автоматически удалит все зависимые строки в таблицах внешнего ключа.

...