我有点困惑,当我们删除类别时是否有必要删除与之相关的子类别(如果有的话),请通过编写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 |
+----------+---------------+-----------+
答案 0 :(得分:1)
鉴于您为此关系定义了Foreign Key
,然后是的,您必须在{上删除(因为孩子不能成为孤儿)或将其设置为null(如果您的CatId列允许null
值) CatID
表上的{1}}列,因为关系数据库使用Subcategories
。您可以定义referential integrity
选项来自动为您完成此操作。
CASCADE
检查this article了解更多详细信息。
如果您有FK,并且希望更多地控制要删除的内容,则必须提供两个sql语句来制作它,作为示例。
ALTER TABLE SubCategory
ADD CONSTRAINT FK_SubCategory_Category
FOREIGN KEY (CatId)
REFERENCES Category (CatId)
ON DELETE CASCADE
答案 1 :(得分:1)
您需要通过更改当前架构来$skuList = explode('/[\r\n]+/', $_POST['skuList']);
:
ON DELETE CASCADE
通过此操作,当您从ALTER TABLE SubCategory
ADD CONSTRAINT fk_SubCat_CatID FOREIGN KEY (CatID) REFERENCES category(CatID )
ON DELETE CASCADE;
表中删除类别时,参考数据将自动删除。只需确保先删除当前约束,然后再使用category
创建新约束即可。