使用SQL中的UPDATE关键字更新多个字段值时,SET后面的更新字段应该使用逗号而不能用AND。虽然用AND不会报错,但会使更新结果错误,下面我将通过场景来分析当我们使用AND时SQL的执行过程和为什么更新结果只会是0/1/NULL;

场景示例

以下是场景更新前的原始查询数据如下:

更新场景1

更新场景2

更新场景3

 更新场景4

 更新场景5

更新场景6

问题发现

为什么结果都为0或者为1或者为Null呢?是不是有什么规律?

总结分析

涉及到两个知识点

(1)当我们SET后使用AND而不是逗号时,第一个“=”前的字段的取值取自“=”后的逻辑运算的结果。我们拿场景1为例子:

(2)SQL中的空值(NULL)

SQL 中的空值( NULL )是一个特殊的值,代表了缺失/未知的数据或者不适用的情况。对于大多数的编程语言而言,逻辑运算的结果只有两种情况:真( Ture )或者假( False )。但是对于 SQL 而言,逻辑运算结果存在三种情况:真、假或者未知( Unknown )。对于 SQL 查询中的 WHERE 条件,只有结果为真的数据才会返回,结果为假或者未知都不会返回。因此, SQL 中的逻辑运算符 AND 、 OR 以及 NOT 的结果也存在三种情况。

AND 操作符的逻辑真值表如下:

其余的逻辑运算与null的结果请自行查阅相关文章。

希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。

扫描下方二维码关注微信公众号,您会收到更多优质文章推送。

MySQL中UPDATE语句里SET后使用AND的执行过程和结果分析的更多相关文章

  1. mysql中update+select

    mysql中不支持嵌套查询后更新操作. 但是可以使用inner join来解决自身的更新问题,参考如下例子: update hera_job a inner join( ),'"') as ...

  2. %ROWTYPE在INSERT和UPDATE语句里的妙用

    PL/SQL里的ROWTYPE类型具有非常大的用处和灵活性,现在发现ROWTYPE在insert和update语句里的妙用,可以节省很多代码,特别是在行copy和更新的时候. 在INSERT语句中: ...

  3. mysql中update的low_priority解决并发问题

    在处理访客信息更新是遇到了大并发的问题,low_priority,低优先级,可以让并发没那么占CPU,对于低配VPS来说,作用还是很大的.UPDATE [LOW_PRIORITY] tbl_name ...

  4. 在微信公众号"码海"里学了一招:在update语句里使用case when 以避免多次更新导致的数据异常.

    需求:将emp表中工资大于一万的降到9成,工资少于一万的乘以1.2. 难点:如果分成两句update执行,在10000附近的值可能会执行两次. 钥匙:在update语句里采用case when,使更新 ...

  5. MYSQL中的语句

    MYSQL中的语句 decimal(8,2):最多存10位数的数字,小数点后保存两位.如:999999.99

  6. mysql 中alter语句中change跟modify的区别

    mysql 中alter语句中change和modify的区别可以使用CHANGE old_col_name column_definition子句对列进行重命名.重命名时,需给定旧的和新的列名称和列 ...

  7. 关于如何在mysql中插入一条数据后,返回这条数据的id

    简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...

  8. MySQL 中 SQL语句大全(详细)

    sql语句总结 总结内容 1. 基本概念 2. SQL列的常用类型 3. DDL简单操作 3.1 数据库操作 3.2 表操作 4. DML操作 4.1 修改操作(UPDATE SET) 4.2 插入操 ...

  9. Python 中 mySQL 中的语句

    class DeleteInventorybusiness(BaseBusiness): def DeleteInventory(self,Delete_goodsID): DeleteInvento ...

随机推荐

  1. 第一天——编程语言与python

    ------------恢复内容开始------------ what's the python? python是一门编程语言,编程语言就是人用来和计算机沟通的语言,语言就是人与人,人与事物进行沟通的 ...

  2. Codis集群相关

    在大数据高并发场景下,单个 Redis 实例往往会显得捉襟见肘.首先体现在内存上,单个 Redis 的内存不宜过大,内存太大会导致 rdb 文件过大,进一步导致主从同步时全量同步时间过长,在实例重启恢 ...

  3. easyui中权限分配和添加 前后端代码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. select * from 多张表的用法

    select * from 多张表的用法   其实就是 inner join   select * from Class c,Student s where c.ClassID=s.ClassID   ...

  5. Java学习日报7.16

    void StudentManage::Sort() //排序功能{ StudentInfo *h,*curr,*temp,*last; h=head; for(int j=0;j<n;j++) ...

  6. JAVA注解基础知识

    定义-摘自JAVA编程思想 注解(元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻能非常方便的使用这些数据. 背景: 注解是JAVA5的一种新特性,是为应对C#等之类对JAV ...

  7. C++ string的内部究竟是什么样的?

    在C语言中,有两种方式表示字符串: 一种是用字符数组来容纳字符串,例如char str[10] = "abc",这样的字符串是可读写的: 一种是使用字符串常量,例如char *st ...

  8. Mysql Cluster7.5.6 windows10 部署安装

    部署方法网上很多,以下是我的实践过程,供大家参考. 1. 硬件:3台虚拟机,全是windows 10 x64 2. 网络架构: 管理节点:192.168.37.128 数据节点 / SQL节点: 19 ...

  9. TextView上下滚动

    public class AutoTextView extends TextSwitcher implements ViewFactory { private float mHeight; priva ...

  10. 如果你的 HTML 里全是 div,那就要小心了

    做前端开发的同学都知道,一个网页的基本组成部分是 HTML,JavaScript 和 CSS.开发人员通常更关注 JavaScript 和 CSS ,实践着各种语言规范和设计模式.对于 HTML 的关 ...