当前位置: 首页 > 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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 配置第三方软件仓库
  • 24暑假2C
  • 深度学习:Head、Neck和Backbone的含义与作用
  • 云计算 Logstash 配置管理
  • word预览方式---插件,vue-office-docx、docx-preview、mammoth.js
  • Redis和Mysql如何保持数据一致性
  • python opencv 绘制多边形 闭合
  • 极简聊天室-websocket版
  • 【Vue3】具名插槽
  • 后端笔记(1)--javaweb简介
  • 【玩转python】入门篇day14-函数
  • Laravel序列化解码:深入Eloquent模型的序列化机制
  • 如何构建自己的交易机器人开发环境
  • 【机器学习】逻辑损失函数的基本概念和探索为什么平方误差损失函数不适用于逻辑回归以及探索逻辑损失函数
  • 基于supervisor制作基于环境变量配置的redis
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【347天】每日项目总结系列085(2018.01.18)
  • CSS魔法堂:Absolute Positioning就这个样
  • JavaScript设计模式系列一:工厂模式
  • jquery cookie
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • mysql 数据库四种事务隔离级别
  • Redis 中的布隆过滤器
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Service Worker
  • 动态规划入门(以爬楼梯为例)
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​决定德拉瓦州地区版图的关键历史事件
  • ######## golang各章节终篇索引 ########
  • #QT 笔记一
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • ( 10 )MySQL中的外键
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (补充)IDEA项目结构
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (回溯) LeetCode 78. 子集
  • (三)SvelteKit教程:layout 文件
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四)stm32之通信协议
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .gitignore文件设置了忽略但不生效
  • .NET C# 使用 iText 生成PDF
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NetCore部署微服务(二)
  • .NET单元测试