注册 登录
  • 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL多表更新或删除案例

MySQL SQL 彭东稳 4450次浏览 已收录 0个评论

我们用到最多的update更新数据都是单表更新了,但有的时候我们不得不使用关联多表进行数据更新了,下面我给各位介绍利用upate实现多表关联更新。另外需要注意的是MySQL从4.0.4版本开始才支持执行一个包含多个表的UPDATE的语句。

下面给出我的实验环境

环境不涉及什么业务场景,纯粹为了达到测试语句的效果,所以不要问这么更新有什么意义之类的?在生产环境中修复数据时也是经常需要使用UPDATE多表更新的。测试只是为了给出一些解决问题的思路,另外每次测试时需要把数据还原成原始数据,这个自己搞定了。

建表语句如下:

一、子查询

根据test_space.user和test_space.user表查询相同用户。

PS:这里只是为了演示,更好肯定使用join查询。

二、多表更新

把test_pay.user和test_space.user表的name字段名称相同的作为条件,条件相同的则把对应的test_space.user表的phone字段信息更新至test_pay.user表的phone字段。

另外一种方法是使用inner join然后更新也是可以的:

三、多表多字段更新

把test_pay.user和test_space.user表的id字段相同的作为条件,条件相同的则把对应的test_space.user表的name字段和phone字段更新至test_pay.user表的name字段和phone字段。

四、子查询加多表更新

把test_pay.user和test_space.user表的name字段名称相同的作为条件,条件相同的则把对应的test_space.user表的phone字段信息更新至test_pay.user表的phone字段。多了一个更新条件就是只需要更新test_pay.user表中phone字段为空的记录。

五、多表删除

搞明白了UPDATE语句,其实DELETE语句中也是一样的道理,但语法使用上还是有差别的。注意,在一个多表删除中,不能使用ORDER BY或LIMIT。

比如下面的根据子查询删除数据。

 

但最好使用如下join语法来进行此类操作,可以更好地利用数据库特性,比如semi join利用。

待补充。。。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)or分享 (0)
关于作者:

您必须 登录 才能发表评论!