0

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

一种以 url 为主的称为类型

url
varchar(255)

还有一个叫订单,在 url 上有一个索引。

url          | id_no
varchar(255) | int

order表中可以有许多值,并且已经设置了一个外键,因此如果url在 table类型中删除 a ,它会删除所有与orderurl匹配的关联键。

订单也可以手动删除,这意味着 aurl可能存在于与表order没有关系的类型中。

有没有办法设置外键,以便如果urlin类型与表顺序没有关系,那么它将从type中删除自己?

查看mysql手册我无法弄清楚,我很困惑,CASCADE因为它说它将删除所有关联的键,但我只想url从表类型中删除一个当且仅当两者之间没有关系?

谢谢你的帮助!

4

1 回答 1

1

DELETE您可以使用表上的触发器轻松地做到这一点order:让它检查是否存在具有相同 url 的其他行,如果不从type.

另一种方法是创建一个维护脚本,类似于

DELETE FROM `type` WHERE url NOT IN (
  SELECT DISTINCT `url` FROM `order`
)

并定期或按需运行它。

于 2012-06-11T21:47:36.513 回答