Как удалить категорию и подкатегорию? - PullRequest
0 голосов
/ 31 октября 2018

У меня небольшая путаница в том, что когда мы удаляем Категорию, необходимо ли удалять Подкатегорию, связанную с этим, если да, пожалуйста, помогите, написав запрос Sql? Аналогично, если удалить подкатегорию, то удаление категории также будет также удалено?

+-------+------------+
| CatID |  CatName   |
+-------+------------+
|     1 | Seeds      |
|     2 | Pesticides |
|     3 | Fertilizer |
+-------+------------+

+----------+---------------+-----------+
| SubCatID |  SubCatName   |    CatID  |
+----------+---------------+-----------+
|        1 | Red Seed      |         1 |
|        2 | Red Seed      |         1 |
|        3 | Red Seed      |         1 |
|        4 | Red Seed      |         1 |
|        5 | National Worm |         2 |
+----------+---------------+-----------+

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вам нужно ON DELETE CASCADE, изменив текущую схему:

ALTER TABLE SubCategory
    ADD CONSTRAINT fk_SubCat_CatID FOREIGN KEY (CatID) REFERENCES category(CatID )
    ON DELETE CASCADE;

При этом при удалении категории из таблицы category справочные данные будут автоматически удаляться. Просто убедитесь, что сбросили текущее ограничение, прежде чем создавать новое с ON DELETE CASCADE.

0 голосов
/ 31 октября 2018

Если у вас определено Foreign Key для этого отношения, тогда да, вы должны удалить (потому что дочерние элементы не могут быть сиротами) или установить значение NULL (если вы используете в столбце CatId значения null) в столбце CatID в таблица Subcategories, поскольку в реляционных базах данных используется referential integrity. Вы можете определить опцию CASCADE, чтобы сделать это автоматически.

ALTER TABLE SubCategory
ADD CONSTRAINT FK_SubCategory_Category
    FOREIGN KEY (CatId)
    REFERENCES Category (CatId)
    ON DELETE CASCADE

Проверьте эту статью для более подробной информации.

Если у вас есть FK и вы хотите больше контроля над тем, что вы удаляете, вы должны предоставить для этого два оператора sql.

delete from subcategory where catId = 1
delete from category where catId = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...