假设我有三个名为category,subcategory和prodcut的表,这个表的结构是
category
====Catid=======CatName=====
| 1 | DRESS |
| 2 | FOOD |
subcategory
====SubCatid=======SubCatName========Catid=====
| 1 | cake | 2 |
| 2 | t-shirt | 1 |
| 3 | chocolate | 2 |
| 4 | shirt | 1 |
product
====productid=======productName========SubCatid=====
| 1 | p1 | 2 |
| 2 | p2 | 1 |
| 3 | p3 | 1 |
| 4 | p4 | 2 |
现在我想让我的应用程序像这样,如果作为记录用户的子类别表上的任何类别不能删除此类别。用户必须从子类别表中删除它,之后用户可以从类别表中删除它。同时,用户也无法删除产品表中存在的子类别中的记录。我尝试使用Foreignkey,但我无法理解解决这个问题的正确方法。请帮我解决这个问题。
答案 0 :(得分:0)
您需要将Foreign Keys与RESTRICT引用选项一起使用:
alter table `subcategory` add foreign key (`Catid`) references `category`(`Catid`) on update cascade on delete restrict
因此,如果有人试图删除具有子类别的类别,MySQL将禁止该输出并输出错误:
Cannot delete or update a parent row: a foreign key constraint fails
产品表相同:
alter table `product` add foreign key (`SubCatid`) references `subcategory`(`SubCatid`) on update cascade on delete restrict