• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL UPDATE 语句的非标准实现代码

    今天给大家介绍一下 MySQL 数据库中 UPDATE 语句和 SQL 标准(以及其他数据库)实现上的一个差异。如果我们没有注意到这个问题,很可能会导致意料之外的结果。

    我们首先创建一个简单的示例表:

    CREATE TABLE t1(
     id int, 
     col1 int, 
     col2 int
    ); 
    
    INSERT INTO t1 VALUES (1, 1, 1);
    
    SELECT * FROM t1;
    id|col1|col2|
    --|----|----|
     1|  1|  1|
    ————————————————
    版权声明:本文为CSDN博主「不剪发的Tony老师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/horses/article/details/110238573CREATE TABLE t1(
     id int, 
     col1 int, 
     col2 int
    ); 
    
    INSERT INTO t1 VALUES (1, 1, 1);
    
    SELECT * FROM t1;
    id|col1|col2|
    --|----|----|
     1|  1|  1|

    然后,我们对表 t1 中的数据进行更新:

    UPDATE t1 
    SET col1 = col1 + 1,
      col2 = col1
    WHERE id = 1;
    
    SELECT col1, col2 
    FROM t1;

    请问查询语句返回的 col1 和 col2 字段的结果分别是什么?

    对于 MySQL 而言,如果 UPDATE 语句在表达式中(col2 = col1)使用了前面被更新的字段(col1),将会使用该字段被更新后的值(2)而不是原来的值(1)。

    注意,MySQL 这种实现方式和 SQL 标准不同。另外我们还测试了其他数据库,包括 Oracle、Microsoft SQL Server、PostgreSQL 以及 SQLite,它们的实现都遵循了 SQL 标准。

    如果我们想要在 MySQL 中实现和标准 SQL 相同的效果,可以在 UPDATE 语句中调整一下被更新字段的顺序。例如:

    UPDATE t1 
    SET col2 = col1,
      col1 = col1 + 1
    WHERE id = 1;

    这样一来,字段 col2 在 col1 之前更新,使用的是 col1 旧值(1),得到的结果和 SQL 标准一致。

    结束语:一般在编写 UPDATE 语句时,我们不需要关心多个字段的更新顺序。但是由于 MySQL 实现的问题,我们需要注意它们的语法顺序。

    到此这篇关于MySQL UPDATE 语句的非标准实现的文章就介绍到这了,更多相关MySQL UPDATE 语句的非标准内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 实操MySQL+PostgreSQL批量插入更新insertOrUpdate
    • MySQL update set 和 and的区别
    • mysql update case 更新字段值不固定的操作
    • Mysql update多表联合更新的方法小结
    • mysql事务select for update及数据的一致性处理讲解
    • MySQL UPDATE 语句一个“经典”的坑
    上一篇:解决出现secure_file_priv null的问题
    下一篇:磁盘写满导致MySQL复制失败的解决方案
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL UPDATE 语句的非标准实现代码 MySQL,UPDATE,语句,的,非标准,