MySql数据库中,对于同一个表,如果直接把查询结果赋值给待更新字段,则会出现锁表的情况。

MySql数据库中,对于同一个表,如果直接把查询结果赋值给待更新字段,则会出现锁表的情况。

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

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

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

 

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

 

UPDATE t_newmanutrail
SET tContent = ( SELECT tContent FROM ( SELECT * FROM t_newmanutrail ) AS tb_temp where trailId = 'd6dae47c568a4e2b95029696d0d6ccb0' )
WHERE
trailId = 'f73b3a7e9f8e4ba09d599419cefaf1ad'

 

博智编程

bbs.yongbosoft.com

posted @ 2023-09-13 16:23  roundlight  阅读(46)  评论(0编辑  收藏  举报