• 深入update语句(延伸学习)


    常常使用的到了更新操作。学习后,知道了update还有其他一些用法,以前并不知道。现在进行总结

    一、update后面使用order by的情况

    什么时候有必要增加order by:假如一个表中有自增型或者唯一键id。当想实现对所有id都加一。就会用到类似如下的sql:

    update teams set teamno=teamno+1
    此时就会出现问题,假如有两行数据,一行的teamno=6,另一行的teamno=7。当执行teamno=teamno+1语句,6的值加上1变成7,但是还存在teamno=7的一行,那么就会出现重复而报错。解决办法是,
    先让teamno=7的行执行更新,然后才让teamno=6的行执行更新。这样就不会出现重复冲突情况。使用 order by可以指定更新的顺序。

    sql语句修改为:update teams set teamno=teamno+1 order by teamno desc

    成功运行。

    总结:因为主键,unique都会要求值是唯一的。更新会出现值重复错误。所以只有针对字段值限制是唯一的时候,使用update才有必要添加order by



    二、update交换列值的测试:
    sql语句  update teams set playerno=division,division=playerno where teamno=129

    结果:两个字段的值变为一样了。

    结论:按照顺序去执行,先执行了playerno=division。后面执行division=playerno的时候,因为前面playerno导致的值已经改变了,因而不是过去的值,将最新的playerno的值赋给了division。结果,我们

    看到两个字段的值变成一样了。

    三、update 更新多表的实践:


    update players as p,teams as t set p.name='测试update更新多表',t.playerno='测试多表更新'  where p.name='个人各个' and t.playerno='jgjgg'

    执行上面语句结果:由于 t.playerno='jgjgg'找不到对于的行,因而这个update语句没有执行set子句的操作。

    是通过where条件来保证,两次update操作视为一个事务保持完整性。

    完全可以分成两次update,如果分解成两个步骤就是:
    update players as p set p.name='测试update更新多表'  where p.name='个人各个'

    update teams as t set t.playerno='测试多表更新' where t.playerno='jgjgg'

    也是可以完成上面的操作。

    使用多表更新的方式有什么好处?

    在多表更新语法中,多次update操作视为一个事务保持完整性,只要其中一个更新失败。那么其他的更新是不会执行的。比如上面的测试结果就说明这点了。

    归纳为:sql语句更简洁。操作更加安全。

    不正确之处,欢迎指正!

  • 相关阅读:
    第4章 Android移植环境搭建
    第3章 Android移植平台工具介绍
    第2章
    第1章 Android系统的编译和移植实例:
    nfs
    TFTP服务器搭建
    根系统制作
    nfs挂载
    uboot的编译
    交叉工具链的搭建方法
  • 原文地址:https://www.cnblogs.com/wangtao_20/p/1962148.html
Copyright © 2020-2023  润新知