版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
mysql在同一个表上查询和更新
mysql不允许对同一张表同时进行查询和更新。
错误例子:
update tbl as outer_tbl set cnt = (select count(*) from tbl as inner_tbl where inner_tbl.type = outer_tbl.type);
解决办法:可以通过使用生成表的形式来绕过上面的限制,让mysql把这个表当作一个临时表来处理。实际上,这样子就执行了两个查询:一个是子查询中的select语句,另外一个是多表关联update。子查询在update语句打开表之前就完成,所以能够正常执行。
正确例子:
update tbl inner join (select type, count(*) as cnt from tbl group by type) as der using(type) set tbl.cnt = der.cnt;