mySQL多表联合删除

来源:互联网 发布:mac镜像 编辑:程序博客网 时间:2024/06/06 03:18

之前的数据库操作都是比较简单的单一增删改查,今天遇到多表通过外键联合,如果主表数据删除,其他从表的数据也必须删除,表结构大致如下

book表字段 print表字段 print_binding表字段 print_binding_year表字段 guid guid guid guid …. book_guid print_guid bind_guid … … … …

也就是说,如果我删除了book的一条记录,其他三个表与之关联的表都需要同时删除
例如,我要删除的book的guid为?

DELETE b,p,pb,pby FROM book bINNER JOIN print p ON b.guid = p.book_guidINNER JOIN print_binding pb ON p.guid = pb.print_guid INNER JOIN print_binding_year pbyON pb.guid=pby.bind_guidWHERE b.guid = ?

但是这样处理会导致一个问题,如果book中有需要删除的数据,而其他三张表中没有与其关联的数据,那么就不会有任何数据被删除,因为满足相等连接条件没有得到满足(因为其他三张表没有对应的内容啊,怎么可能会满足!)
具体理论可以参考内连接与外连接小结

如果book表一定有数据,而关联的表有可能有数据也有可能没数据的话,我们可以通过左连接删除的方式,把两张表都删除。无论关联的表有没有数据,book表都可以删除成功

DELETE b,p,pb,pby FROM book bLEFT OUTER JOIN print p ON b.guid = p.book_guidLEFT OUTER JOIN print_binding pb ON p.guid = pb.print_guid LEFT OUTER JOIN print_binding_year pbyON pb.guid=pby.bind_guidWHERE b.guid = ?

原理参见内连接与外连接小结

原创粉丝点击