mysqlupdate原理(MySQL UPDATE 语句的非标准实现代码)
类别:数据库 浏览量:2288
时间:2021-10-13 00:33:06 mysqlupdate原理
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版权协议,转载请附上原文出处链接及本声明。 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| |
然后,我们对表 t1 中的数据进行更新:
|
UPDATE t1 SET col1 = col1 + 1, col2 = col1 WHERE id = 1; SELECT col1, col2 FROM t1; |
请问查询语句返回的 col1 和 col2 字段的结果分别是什么?
- 对于 SQL 标准以及其他数据库的实现,结果分别为 2 和 1。
- 但是对于 MySQL,结果分别为 2 和 2!
对于 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 语句的非标准内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/horses/article/details/110238573
您可能感兴趣
- mysqlcount使用技巧(MySQL巧用sum、case和when优化统计查询)
- navicat怎么和mysql连接(Navicat Premium远程连接MySQL数据库的方法)
- MYSQL中GROUP BY不包含所有的非聚合字段时的注意事项
- mysql8.0安装教程win10(Windows10下mysql 8.0.22 安装配置方法图文教程)
- mysql的简单介绍(MySQL Shell的介绍以及安装)
- mysql的连接代码(MySQL 连接查询的原理和应用)
- mysql集群是用什么搭建的(MySQL5.7 集群配置的步骤)
- mysql有哪些索引和聚簇索引(MySQL 独立索引和联合索引的选择)
- 合理设置服务mysql最大连接数(MySQL正确修改最大连接数的3种方案)
- mysql各种查询方式(mysql查询的控制语句图文详解)
- mysql创建表的基本步骤(mysql中操作表常用的sql总结)
- mysqldump导入导出(MySQL官方导出工具mysqlpump的使用)
- mysql数据表的创建与管理(MySQL数据操作-DML语句的使用)
- mysql慢日志查询作用(MySQL 慢查询日志的开启与配置)
- mysql 多表连接查询(MySQL多表查询的具体实例)
- mysql5.7.36详细安装(CenOS6.7下mysql 8.0.22 安装配置方法图文教程)
- 今日菜价 芥兰涨幅最高 1.33 ,花菜降幅最高 3.10(今日菜价芥兰涨幅最高)
- 今日菜价 椰菜涨幅最高 3.25 ,水空心菜降幅最高 2.58(今日菜价椰菜涨幅最高)
- 今日菜价 红三鱼涨幅最高 4.41 ,黄鳝降幅最高 5.06(红三鱼涨幅最高)
- 今日菜价 西生菜涨幅最高 6.19 ,生菜降幅最高 5.38(西生菜涨幅最高)
- 今日菜价 青豆角涨幅最高 0.70 ,菜心降幅最高 5.55(青豆角涨幅最高)
- 农村植物,龙芽草若长在您家路旁,请珍惜,它对抗癌有特效(龙芽草若长在您家路旁)
热门推荐
- nginx负载均衡5种方法(Nginx如何配置负载均衡)
- php开发中用什么模板(PHP模版引擎原理、定义与用法实例)
- dedecms的简单说明(DEDECMS5.5在国外Linux主机下无法采集的解决方法)
- mysqltruncate(MYSQL中Truncate的用法详解)
- dockerswarm 均衡策略(以示例讲解Clickhouse Docker集群部署以及配置)
- dockerfile镜像案例(Dockerfile构建自定义镜像的实现)
- html5怎么滚动屏幕(HTML5 video进入全屏和退出全屏的实现方法)
- mysqlinnodb数据存储格式(MySQL InnoDB ReplicaSet副本集简单介绍)
- docker 容器经常启动失败(浅谈Docker run 容器处于created状态问题)
- 租用云服务器或者云主机价格(云主机租用注意事项有哪些?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9