mysql在两列上使用FOREIGN KEY

时间:2014-03-20 06:10:47

标签: mysql foreign-keys

我有以下表格:

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

问题出在TABLE2TABLE3

之间

假设我有

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 prodnr OR prod(现在我有prod的问题)。

谢谢!

1 个答案:

答案 0 :(得分:0)

T3为什么要将外键指向T2?它应该指向Prod。

T3中的ID#1指向1005,指向您尝试删除的T2中的条目。这违反了您尝试删除T2条目时设置的外键。