当前位置: 首页 > news >正文

MySQL update set语句中 逗号与and的区别

语法

以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

参数说明:

  • table_name 是你要更新数据的表的名称。
  • column1column2, ... 是你要更新的列的名称。
  • value1value2, ... 是新的值,用于替换旧的值。
  • WHERE condition 是一个可选的子句,用于指定更新的行。如果省略 WHERE 子句,将更新表中的所有行。

举例

表结构:

CREATE TABLE `test` (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(32) COLLATE utf8mb4_general_ci NOT NULL,`age` int NOT NULL,`data` json DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

例如表中目前id = 101的数据

正常update sql:

update test set age = 18 , name = '小明' where id = 101

执行后:

set语句中用and

有时把set后面字段间的逗号替换成and也不会报错:

update test set age = 22 and name = '小明' where id = 101

之后的结果为:

可以看到age的值为1 。

原因:

 这是因为MySQL 在语法上,并不认为 and 这个用法是错误的,那么说明 MySQL 用另外的方式“解读”了这个语句。最容易想到的,就是 MySQL 是不是在 set 的时候,把 and 解释成了逻辑运算符,而不是英文意义上的“和”?,上面语句standard_duration为1 符合数据库处理 bool 数据时的行为(用 0 和 1 代替 False 和 True)。

上面的语句等价于:

update test set age = (22 and name = '小明') where id = 101

 (22 and name = '小明')中的22不为0所以为true,name = '小明'和表中的值是相等的,所以也为true,所以整个表达式的值为true,因此最终age的值为1(true)

http://www.lryc.cn/news/412639.html

相关文章:

  • C++面试---小米
  • Java 实现 AVL树
  • CNN卷积网络实现MNIST数据集手写数字识别
  • 深入理解Java中的时间处理与时区管理
  • 虚拟机windows server创建域
  • Java 集合框架:Java 中的 Set 集合(HashSet LinkedHashSet TreeSet)特点与实现解析
  • springboot智能健康管理平台-计算机毕业设计源码57256
  • LetterBox图像预处理方法
  • C++第五篇 类和对象(下) 初始化列表
  • C#中的通信
  • CVE-2022-21663: WordPress <5.8.3 版本对象注入漏洞深入分析
  • C语言笔试题(三)
  • minio笔记之windows下安装使用
  • 代码随想录算法训练营day31 | 56. 合并区间、738.单调递增的数字
  • 利用 Python 制作图片轮播应用
  • 报表系统之Cube.js
  • 代码随想录算法训练营第45天
  • solidity合约创建
  • 队列---循环队列实现
  • 【视频讲解】后端增删改查接口有什么用?
  • 双指针hard题
  • 前端实现【 批量任务调度管理器 】demo优化
  • 【数据结构】包装类和泛型
  • 浅学爬虫-数据存储
  • 十六、maven git-快速上手(智慧云教育平台)
  • chrome/edge浏览器插件开发入门与加载使用
  • 【完美解决】 TypeError: ‘str’ object does not support item assignment
  • Android SurfaceFlinger——渲染开始帧(四十三)
  • fastadmin搜索栏实现某字段动态下拉搜索
  • .NET未来路在何方?