Mysql外键,必须匹配引用表或密钥被删除?

时间:2012-06-11 21:43:05

标签: mysql database database-design foreign-key-relationship

我在mysql中的两个表之间有一对多的关系。

一个名为类型,主要为url

url
varchar(255)

其中一个名为 order ,其中包含url上的索引。

url          | id_no
varchar(255) | int

订单表中可以包含多个值,并且已设置外键,以便在表类型中删除url时它会删除与顺序匹配url的所有关联键。

也可以手动删除订单,这意味着类型中可能存在与{strong>订单没有关系的url

有没有办法设置外键,以便如果类型中的url与表格订单没有关系,那么它将会从类型

中删除自己

查看mysql手册我无法弄明白,我对CASCADE感到困惑,因为它会删除所有相关的键,但我只想删除表中的url 类型当且仅当两者之间没有关系时?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用DELETE表上的order触发器轻松执行此操作:如果存在具有相同网址的其他行,则检查,如果不是从type删除它

另一种方法是创建类似于

的维护脚本
DELETE FROM `type` WHERE url NOT IN (
  SELECT DISTINCT `url` FROM `order`
)

并定期或按需运行。