临时表的用法之一
侧边栏壁纸
  • 累计撰写 188 篇文章
  • 累计收到 26 条评论

临时表的用法之一

五好
2023-12-22 / 0 评论 / 6 阅读 / 正在检测是否收录...

对应的错误信息:

SQL语句:

update arc a set title=(select title from arc where id=a.cpid) where bid=1 limit 600;

我的意图是 更新一本书的章节标题,标题取之与 arc表中另外一本书的章节标题,运行即报上面的错误,

错误原因是:MySQL 不允许在 UPDATE 查询中直接引用正在被更新的表,以避免潜在的数据一致性问题。


一番操作后得到的解决方案是 临时表法,解决思路:
把需要的数据存入到临时表,这样就不存在引用同一张表的问题了。

CREATE TEMPORARY TABLE temp_table AS
    SELECT id,title FROM arc WHERE bid = 2;
update arc a set title=(select title from temp_table where id=a.cpid) where bid=1 limit 600;

执行成功后再把创建的临时表删除
DROP TEMPORARY TABLE IF EXISTS temp_table;

0

评论 (0)

取消