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

作者:不剪发的Tony老师 时间:2024-01-16 19:08:57 

今天给大家介绍一下 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 字段的结果分别是什么?

  • 对于 SQL 标准以及其他数据库的实现,结果分别为 21

  • 但是对于 MySQL,结果分别为 22

对于 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 实现的问题,我们需要注意它们的语法顺序。

来源:https://blog.csdn.net/horses/article/details/110238573

标签:MySQL,UPDATE,语句
0
投稿

猜你喜欢

  • sqlserver 2000中创建用户的图文方法

    2024-01-18 20:02:39
  • MYSQL教程:服务器优化和硬件优化

    2009-02-27 15:43:00
  • python如何生成任意n阶的三对角矩阵

    2021-09-18 07:41:37
  • PYQT5 vscode联合操作qtdesigner的方法

    2023-10-31 16:46:41
  • Django的基本运用之Django垃圾分类详解

    2022-02-02 01:46:13
  • Numpy中创建数组的9种方式小结

    2021-03-25 21:39:43
  • Windows10下 python3.7 安装 facenet的教程

    2022-06-21 11:17:01
  • Smush it - 一款图片压缩的Firefox插件,很好,很强大!

    2009-04-12 20:09:00
  • python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例

    2023-05-17 14:06:23
  • 【MongoDB for Java】Java操作MongoDB数据库

    2023-07-14 01:10:43
  • 重新发现HTML表格

    2009-12-02 09:47:00
  • Python configparser模块应用过程解析

    2022-08-03 19:56:11
  • python 串行执行和并行执行实例

    2022-07-12 07:32:58
  • Python中类的mro与继承关系详解(二)

    2022-02-28 07:34:17
  • python删除特定文件的方法

    2023-07-13 23:29:36
  • Python中import导入不同目录的模块方法详解

    2021-04-08 02:37:08
  • python使用在线API查询IP对应的地理位置信息实例

    2021-12-10 23:59:16
  • python将一组数分成每3个一组的实例

    2021-11-21 01:40:35
  • Python中pandas模块DataFrame创建方法示例

    2022-07-19 03:06:09
  • pytorch常用数据类型所占字节数对照表一览

    2021-07-25 15:26:29
  • asp之家 网络编程 m.aspxhome.com