【发布时间】:2012-02-11 07:15:18
【问题描述】:
我的数据库中有 3 个表(还有更多,但还没有与这些表的连接)
- 具有列 ID 的表“分子”
- 表“descriptor”,列“id”和“molecule_id”,外键引用“molecule.id”
- 表“tDepDescriptor”,列“id”和“descriptor_id”,外键引用“descriptor.id”
(每个表都有更多列,但这些列都不是外键或类似的东西)
所有外键都指定了“on delete cascade”,所有 id 都是 unsigned int(5)。
现在,如果我尝试删除“分子”中的一个条目,该条目在“描述符”和“tDepDescriptor”中有引用条目,就像外键设置为“更新限制”一样,不会发生任何错误,不会给出错误. 如果我删除“descriptor”中的条目,“tDepDescriptor”中的所有引用条目都将被删除。 如果我尝试删除“分子”中的条目,在“描述符”中有引用条目,但没有引用“tDepDescriptor”中的那些“描述符”条目,也会发生同样的情况。 所以“on delete cascade”适用于两个表,但是当涉及三个表时,“cascade”似乎没有传递。
这些表应该做的是: 当我想删除“分子”中的条目时,“描述符”中的所有引用条目都将被删除。因此,“tDepDescriptor”中引用“descriptor”中已删除条目之一的所有条目也将被删除。
mysql服务器版本为5.1,引擎为InnoDB
希望有人能按照这个复杂的解释来帮助我。
//编辑: 发现了问题。 似乎是 phpMyAdmin 的问题,而不是数据库的问题。单击 PMA 中的删除不起作用,但手动编码查询确实,级联所有三个表。奇怪,但至少我知道我的桌子工作正常。
【问题讨论】:
标签: mysql foreign-keys