zoukankan      html  css  js  c++  java
  • 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 = '赵六'

  • 相关阅读:
    自闭的D7
    D2
    Codeforces Round #531 (Div. 3)
    hello 2019 D
    牛客练习赛36B
    cf954H
    gym102007 E
    Gym 101972
    Gym 101810
    试题 历届试题 青蛙跳杯子(bfs)
  • 原文地址:https://www.cnblogs.com/makalochen/p/11732462.html
Copyright © 2011-2022 走看看