mysql 查询更新操作

题:获取姓名为张三 的用户的age,并将age赋值给姓名赵六的的用户。原始数据:

一般的写法是:

UPDATE user SET age = ( SELECT age FROM user WHERE name = '张三' ) WHERE name = '赵六';

这样的写法对Oracle和SQLServer 来说都是正确的。但是mysql会报一个错误 :

原因是:mysql在from子句中遇到子查询时,先执行子查询并将结果放到一个临时表中,我们通常称它为“派生表”;临时表是没有索引、无法加锁的。

update时,会锁表,此时不能再select。所以会报错,

此时如果将结果集放入临时表,临时表不会上锁,所以,可以正常查询并更新。

正确的写法:

UPDATE user SET age = ( SELECT age  FROM ( SELECT * FROM user ) AS tb_temp WHERE name = '张三' ) WHERE	name = '赵六'

THE END

文章版权:作者:demo  来源:芝麻通  

免责声明:本站提供的一切软件、插件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

本文最后更新于 2022-08-12 13:51:29,如果你的问题还没有解决,可以加入建站交流群和群友们一起讨论。

评论区