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
您可能感兴趣
- mysql有什么索引(MySQL 普通索引和唯一索引的区别详解)
- docker创建mysql环境(docker上部署MySQL的示例)
- mysql中定义字段时zerofill属性的作用
- mysql 删除数据回收空间(浅谈为什么MySQL不建议delete删除数据)
- mysql8.0.23的安装步骤(mysql 8.0.22 下载安装配置方法图文教程)
- mysql删除数据库的命令(MySQL 线上数据库清理数据的方法)
- django mysql设置(Django框架使用mysql视图操作示例)
- mysql创建数据库基本指令(MySql 新建用户与数据库的实际操作步骤)
- phpmysql怎么搭建(PHP使用PDO、mysqli扩展实现与数据库交互操作详解)
- mysql主从复制时突然来了一批数据(MySQL主从复制断开的常用修复方法)
- mysql全表查询如何优化(MySQL 分组查询的优化方法)
- mysql双向同步原理(详解MySQL的半同步)
- mysql显示所有数据库语句(MySQL数据库自动补全命令的三种方法)
- mysql exists的用法(Mysql exists用法小结)
- 宝塔数据库不小心删了(宝塔面板MySQL数据库经常自动停止的解决方法)
- mysqljoin语句用法(MySQL的join buffer原理)
- 八月再见 愿你岁月不扰,余生静好(八月再见愿你岁月不扰)
- 赏读 八月再见,九月你好(赏读八月再见九月你好)
- 散文 八月再见,九月,我在风中等你(散文八月再见九月)
- 8月再见 9月你好(8月再见)
- 魔兽世界 设计师爆料,原始版本并无PVP,跨阵营属于返璞归真(魔兽世界设计师爆料)
- 吐槽完《弧光大作战》之后,我们和设计师聊了聊魔兽首款手游的立项初衷和未来(吐槽完弧光大作战之后)
热门推荐
- 浅析vps和云服务器的区别(浅析vps和云服务器的区别)
- SQL Server中raiserror
- 服务器的维护与管理(浅谈网站服务器的维护管理)
- 怎样在python中散点图(python使用Plotly绘图工具绘制散点图、线形图)
- python小程序编程代码(python实现烟花小程序)
- laravel count 报错(解决laravel5.5访问public报错的问题)
- C#中Nullable<T>
- dockervolume迁移工具(Docker中数据卷volume管理的两种方式)
- 阿里云域名解析地址写什么(阿里云 Linux 服务器内部无法解析域名问题解决方法)
- python常见知识点整理(Python基础知识点 初识Python.md)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9