时间:2021-05-24
今天给大家介绍一下 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 = col1WHERE 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 + 1WHERE id = 1;这样一来,字段 col2 在 col1 之前更新,使用的是 col1 旧值(1),得到的结果和 SQL 标准一致。
结束语:一般在编写 UPDATE 语句时,我们不需要关心多个字段的更新顺序。但是由于 MySQL 实现的问题,我们需要注意它们的语法顺序。
到此这篇关于MySQL UPDATE 语句的非标准实现的文章就介绍到这了,更多相关MySQL UPDATE 语句的非标准内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
mysql操作同样有循环语句操作,网上说有3中标准的循环方式:while循环、loop循环和repeat循环。还有一种非标准的循环:goto。鉴于goto语句的
MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型。其区别在于,float,double等非标准类型,在DB中保存的是
本文实例讲述了ThinkPHP实现非标准名称数据表快速创建模型的方法。分享给大家供大家参考。具体方法如下:非标准名称数据表,例如:cow_archives_4,
淘宝有很多种类,有些是非标准产品,有些是标准产品,有些新手卖家可能不知道如何区分这两种产品。让我们简单谈谈如何区分这两种产品。首先,非标准产品。非标准品不如看设
直通车非标准品和标准品的操作明显不同,点击率如何?很多人都想知道,接下来就直通车的非标准点击率进行说明,想知道的朋友们可以跟着我们看看。如何开始?因为非标准主要