如果没有外部约束,MySQL删除行

时间:2013-11-13 02:33:26

标签: mysql sql

我有两张桌子。一个名为peoples的人称为addressespeoples表在address表(peoples.address_id = addresses.address_id)上有外部约束。多个人可能具有相同的地址。 address

上的addresses列有一个唯一约束

我遇到了一种情况,我必须从peoples表中删除一个人以及addresses表上的相关地址,如果peoples表中没有其他记录{} 1}}具有相同地址的表。

我怎样才能在MySQL中这样做?

2 个答案:

答案 0 :(得分:2)

您可以使用下面的NOT EXISTS子句

DELETE FROM addresses 
WHERE NOT EXISTS 
(SELECT * FROM peoples WHERE peoples.address_id=addresses.address_id)

对此的缺点是它会非常慢,因为它将为每个存在的地址行重新运行查询。否则它应该解决问题。

先删除此人。然后,如果地址没有人

,则此查询将删除

答案 1 :(得分:2)

这比执行子查询更有效:

DELETE
    addresses
FROM
    addresses
    LEFT JOIN peoples
        ON addresses.address_id = peoples.address_id
WHERE
    peoples.address_id IS NULL

它应该删除peoples表中未引用的所有地址。如果您只想删除相关的具体地址,请在WHERE条款中添加一些内容,例如AND addresses.address_id = '<address_id>'

Example