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双主主主架构配置方案)
- linuxmysql安装教程5.7.25学习(linux mysql5.5升级至mysql5.7的步骤与踩到的坑)
- mysql怎么使用null(MySQL null与not null和null与空值''''的区别详解)
- MySQL 8.0.19安装详细教程(windows 64位)(MySQL 8.0.19安装详细教程windows 64位)
- mysql返回结果集函数(mysql 判断是否为子集的方法步骤)
- navicat创建MySql定时任务的方法详解(navicat创建MySql定时任务的方法详解)
- mysql千万数据如何优化(MySQL千万级数据的表如何优化)
- MySQL执行事务的语法与流程详解(MySQL执行事务的语法与流程详解)
- MySQL中使用mysqldump命令备份
- mysql设置updatetime自动更新(mysql 实现添加时间自动添加更新时间自动更新操作)
- 终于有人将mysql 索引讲清楚了(MySQL 索引的一些细节分享)
- mysql8.0.25.0安装配置(MySQL8.0.23免安装版配置详细教程)
- mysql读写分离代码实现(MySQL Router实现MySQL的读写分离的方法)
- mysql修改表结构的关键字(查看修改MySQL表结构命令)
- centos系统mysql安装及连接教程(CentOS8安装SQLServer2019的过程)
- idea怎样连接mysql(IDEA配置连接MYSQL数据库遇到Failed这个问题解决)
- TVB新剧《黯夜守护者》将播,陈展鹏陈炜首次合作探讨人性(TVB新剧黯夜守护者将播)
- 新晋小花被称女版吴卓羲 将取代滕丽名成为TVB新一代御用女警(新晋小花被称女版吴卓羲)
- 艺人吴卓羲10年警察生涯,演足10年阿Sir,系咩玩法(艺人吴卓羲10年警察生涯)
- 菲律宾潜水(菲律宾潜水价格)
- 泰国人妖(变性手术生殖器要割掉吗)
- 泰国美女(泰国人妖和女性如何区分)
热门推荐
- css中分割线的渐变效果(CSS学习笔记之可重复渐变repeating-linear-gradient)
- dedecms会员功能(dedecms注册中文会员无法打开空间的解决方法)
- linux分区管理(在腾讯云的Linux系统服务器上格式化和分区磁盘的教程)
- SQL中AVG、COUNT、SUM、MAX等函数对NULL值处理
- apache服务配置详解(apache配置开启网站服务步骤)
- vue 单文件组件(vue实现一个单文件组件的完整过程记录)
- dedecms自助购买(DEDECMS 支付宝操作手册)
- dedecms标签怎么调用(dedeCMS 站内搜索代码的改进方法)
- extjs tabPanel的用法
- idea 一键部署springboot docker(IDEA部署Docker到WSL2的详细过程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9