我有以下表格:
TABLE1
| id | nr | name | ...
TABLE2
| id | nr | prod | ...
表3
| id | nr | prod | act | data | publ | ...
PROD
| id | id_prod | prod | name | ...
TABLE2.nr FOREIGN KEY TABLE1.nr DELETE RESTRICT UPDATE CASCADE
TABLE3.nr FOREIGN KEY TABLE1.nr DELETE RESTRICT UPDATE CASCADE
TABLE2.prod FOREIGN KEY PROD.id_prod DELETE RESTRICT UPDATE CASCADE
TABLE3.prod FOREIGN KEY TABLE2.prod DELETE RESTRICT UPDATE CASCADE
问题出在TABLE2
和TABLE3
假设我有
TABLE2
| id | nr | prod | ...
1 301 1001
2 301 1005
3 301 2098
4 305 1005
5 305 2099
表3
| id | nr | prod | act | data | publ | ...
1 301 1005 1 ... ... ...
2 301 1001 NULL ... ... ...
3 305 2099 1 ... ... ...
4 305 2098 1 ... ... ...
现在假设我想要DELETE FROM TABLE2 WHERE id = 4
。
Mysql返回错误,因为TABLE2.prod和TABLE3.prod之间有一个FOREIGN KEY。
但实际上,我没有用nr = 301
触及对象的数据,在TABLE3中也有一个条目301 1005
。
我该如何解决这个问题?是否可以在2列之间添加外键?
我想阻止从TABLE3中删除TABLE2数据,但不仅要比较nr AND prod
列nr OR prod
(现在我有prod的问题)。
谢谢!
答案 0 :(得分:0)
T3为什么要将外键指向T2?它应该指向Prod。
T3中的ID#1指向1005,指向您尝试删除的T2中的条目。这违反了您尝试删除T2条目时设置的外键。