首页
学习
活动
专区
圈层
工具
发布

MySQL这样写UPDATE语句,劝退

来自:ju.outofmemory.cn/entry/336774 最近好几次有开发同学在钉钉上问我,比如下图: 问题归纳起来就是:在MySQL里面update一条记录,语法都正确的,但记录并没有被更新...刚遇到这个问题的时候,我拿到这条语句直接在测试库里面执行了一把,发现确实有问题,但和开发描述的还是 有区别 ,这里我用测试数据来模拟下: 有问题的SQL语句 执行之前的记录是这样的: 执行之后的记录是这样的...看起来,语法是完全没有问题,翻了翻MySQL官方文档的update语法: 看到assignment_list的格式是以逗号分隔的col_name=value列表,一下子豁然开朗,开发同学想要的多字段更新语句应该这样写...小结 : 在一条UPDATE语句中,如果要更新多个字段,字段间不能使用“AND”,而应该用逗号分隔。...因此,这个逻辑表达式的结果为 false , false在MySQL中等价于0!

4.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL这样写UPDATE语句,劝退

    # 起因 最近,好几次有开发同学在钉钉上问我,比如下图: 问题归纳起来就是:在MySQL里面update一条记录,语法都正确的,但记录并没有被更新… # 结论 小结:在一条UPDATE语句中,如果要更新多个字段...# 现象 刚遇到这个问题的时候,我拿到这条语句直接在测试库里面执行了一把,发现确实有问题,但和开发描述的还是有区别,这里我用测试数据来模拟下: 有问题的SQL语句: update apps set owner_code...分析 看起来,语法是完全没有问题,翻了翻MySQL官方文档的update语法: 看到assignment_list的格式是以逗号分隔的col_name=value列表,一下子豁然开朗,开发同学想要的多字段更新语句应该这样写...小结:在一条UPDATE语句中,如果要更新多个字段,字段间不能使用“AND”,而应该用逗号分隔。...因此,这个逻辑表达式的结果为false,false在MySQL中等价于0!

    4.3K20

    MySQL十八:写语句的执行过程

    转载~ 当我们需要修改一个记录时,数据库会先根据条件找到要修改的数据,然后执行修改写入操作,因此我们再分析写操作的执行过程时,其实是包含读语句的执行过程的。...二、写语句的执行过程 2.1写语句是怎么执行的 前面说到,更新操作时,也会走先查询,所以它的执行流程也是大同小异的。...事实上也的确如此,它们很类似,但是更新语句会比查询语句多两个步骤」。 2.2写语句比读语句多了什么 上面说到更新语句会比查询语句多两个步骤,具体是多了什么呢?...2.5 写入语句的执行过程 通过对以下的几篇文章的介绍,可以使我们对MySQL的写入有了一个大概的认识,内部的执行原理也有了比较清晰的认知,接下来看一下一条sql在执行的整个流程中,从它经历组件,各个组件做的操作等角度来分析一下写操作的执行过程...Buffer Pool怎么刷脏,怎么保证Buffer Pool在有限的内存中加载到更多的热点数据,怎么提高Buffer Pool的命中率等,这些问题在以往的文章中都有详细介绍,有兴趣的可以看一下以下几篇文章

    3.3K20

    MySQL Update语句是怎么执行的?

    MySQL Update语句是怎么执行的?...[isd2tnp037.png] 昨天,我们利用这张图,了解了一个select语句的执行过程,讲解了连接器、查询缓存、分析器、优化器、执行器等模块的作用,今天我们来看一条update语句是怎么执行的...其实,update语句的执行过程和select语句差不多,但是在update语句执行的过程中,MySQL新增加了两个重要的日志模块,他们分别是redo log(重做日志)和binlog(二进制日志、也可以称之为归档日志...,之前提交的记录都不会丢失,这个能力称为crash-safe 接下来我们来看binlog,binlog记录的是MySQL数据库对于数据记录的增删改操作,这里,强调一下redo log和binlog的三点不同之处...3、redo log是循环写的,空间固定;binlog是追加写的,写满之后会切换到下一个,不会覆盖 02 update操作究竟做了什么?

    5.9K40

    MySQL Select语句是怎么执行的?

    MySQL Select语句是怎么执行的?...[7goo7i5di4.png] 首先,我们可以看到,整个select语句包含三个模块,其中客户端和MySQL两个部分,MySQL又包含server端和存储引擎侧,server端包含连接器、查询缓存...如果我们的查询没有真正命中查询缓存,那么就要进入分析器这个环节了,分析器的主要功能是词法分析和语法分析,其中: 词法分析指的是根据SQL分析出来select、update、alter、列名、表名、库名等; 语法分析是指需要分析你写的...执行器: SQL经过优化器之后,就会进入执行器,执行SQL前,需要校验表的权限,如果有权限,会根据表的存储引擎定义,去使用这个存储引擎提供的接口,最终将数据返回给客户端,并开始等待新的连接。...A1:有些时候,SQL语句要操作的表不只是SQL字面上那些。比如如果有个触发器,得在执行器阶段(过程中)才能确定。优化器阶段前是无能为力的 Q2:MySQL权限到底在哪里验证?

    3.3K40

    《MySQL》系列 - select 语句是怎么执行的?

    再次分享出来,希望对你有帮助~ mysql 作为一个关系型数据库,在国内使用应该是最广泛的。...mysql 链接数据库是这样写的: mysql -h 127.0.0.1 -P 3306 -u root -p # 127.0.0.1 : ip 3306 : 端口 root : 用户名 运行命令之后需要输入密码...1.2 查询缓存 连接建立以后可以执行 select 语句了。这就会来到第二步:查询缓存。 查询缓存中存储的数据是 key-value 的形式,key 是查询语句,value 是查询的结果。...逻辑是这样的:先看看查询缓存有没该语句对应的 value?有则直接取出返回客户端,无则继续到数据库执行语句。查出结果后会放一份到缓存中,再返回客户端。...怎么连接等等。 1.5 执行器 分析器知道了做啥、优化器知道了应该怎么做。接下来就交给执行器去执行了。 开始执行,判断是否有相应的权限。

    3.1K20

    MySQL(DML数据定义语句)

    目录: 插入语句 单行插入 多行插入 批量插入 更新语句 删除语句 插入语句 单行插入 语法: INSERT INTO 表名【(字段1,字段2,字段3)】 VALUES...代码示例: 只插入一个指定数据: insert into b_user(name) values('张三'); 不指定插入数据(需要与字段列表顺序一致): insert into b_user values...birthday) values('王1','男','2020-01-01'),('王2','男','2020-01-01'),('王3','男','2020-01-01'); 批量插入 将一个查询结果全部插入到数据库中...INTO 表名 SET 字段名=值,字段名=值; 示例代码: INSERT INTO temp_user SET name='kobe',sex='男',birthday='1976-01-01'; 更新语句...代码示例: 删除ID=3的用户信息 DELETE FROM temp_user WHERE user_id=3; 注意:企业开发过程中谨慎的去使用delete语句 建议书写方式: 1.先用查询语句 SELECT

    1.4K10

    【MySQL 系列】MySQL 语句篇_DCL 语句

    1、MySQL 中的 DCL 语句 1.1、数据控制语言–DCL DCL( Data Control Language,数据控制语言)用于对数据访问权限进行控制,定义数据库、表、字段、用户的访问权限和安全级别...如果没有该参数,就会直接登录到 MySQL 数据库中,然后可以使用 USE 命令来选择数据库 -e 参数:后面可以直接加 SQL 语句。...在 MySQL 中,您可以使用 CREATE USER 语句在数据库服务器中创建一个新用户。...只有在赋予他数据库和相关表的权限之后,他才可以进行选择数据库和查询等操作。 在 MySQL 中, GRANT 语句用于给用户赋予权限。...除了可以显示当前用户的权限和角色,要执行 SHOW GRANTS 的语句,你需要有 mysql 系统数据库的 SELECT 权限。

    3.4K10
    领券