关于Mysql update修改多个字段and的语法问题详析

在MySQL里面update一条记录,语法都正确的,但记录并没有被更新...

问题语句

执行之前的记录是这样的:

执行之后的记录是这样的:

可以看到,实际上是有效果的:

why?

看起来,语法是完全没有问题,MySQL官方文档的update语法:

看到assignment_list的格式是以逗号分隔的col_name=value列表,一下子豁然开朗,开发同学想要的多字段更新语句应该这样写:

小结:在一条UPDATE语句中,如果要更新多个字段,字段间不能使用“AND”,而应该用逗号分隔。

原理:为什么使用“AND”分隔的时候,会出现owner_code=0的奇怪结果? 多次尝试之后发现:

('43212' and owner_name='李四')是一个逻辑表达式,而这里不难知道owner_name并不是‘李四'。因此,这个逻辑表达式的结果为false,false在MySQL中等价于0!

到此这篇关于mysql update修改多个字段and的语法问题的文章就介绍到这了,更多相关mysql update修改字段and语法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 实例验证MySQL|update字段为相同的值是否会记录binlog

    一 前言 前几天一个开发同事咨询我,update 更新字段为相同的值是否会记录binlog,我回复说不会. 其实 严格的说这个答案是不准确的,说要区分场景.是否记录 update 语句到binlog依赖于 binlog_format 的设置.具体情况 实践出真知. 二 测试 2.1  binlog_format 为 ROW 模式 2.2  binlog_format 为 STATEMENT 模式 解析binlog内容,完整的记录了update语句. 2.2  binlog_format 为 MI

  • MySQL 从一张表update字段到另外一张表中

    先来几个简单的示例 Solution 1:  1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; Solution 2:  多个列 update a, b set a.title=b.title, a.name=b.name where a.id=b.id Solution 3: 子查询 update student s set city_name = (select name from

  • MySQL 替换某字段内部分内容的UPDATE语句

    要替换某一个字段中的部分内容,可以用update 语句: UPDATE 表名 SET 字段名= REPLACE( 替换前的字段值, '替换前关键字', '替换后关键字' ) WHERE 字段名 REGEXP "替换前的字段值"; 比如替换标题里面的产品价格就是用这个方法 复制代码 代码如下: UPDATE dede_archives SET title= REPLACE( title, 155, 170 ); UPDATE dede_archives SET title= REPLAC

  • 关于Mysql update修改多个字段and的语法问题详析

    在MySQL里面update一条记录,语法都正确的,但记录并没有被更新... 问题语句 执行之前的记录是这样的: 执行之后的记录是这样的: 可以看到,实际上是有效果的: why? 看起来,语法是完全没有问题,MySQL官方文档的update语法: 看到assignment_list的格式是以逗号分隔的col_name=value列表,一下子豁然开朗,开发同学想要的多字段更新语句应该这样写: 小结:在一条UPDATE语句中,如果要更新多个字段,字段间不能使用"AND",而应该用逗号分隔.

  • 在MySQL中修改密码及访问限制的设置方法详解

    由于其源码的开放性及稳定性,且与网站流行编 挥镅 PHP的完美结合,现在很多站点都利用其当作后端数据库,使其获得了广泛应用.处于安全方面的考虑,需要为每一用户赋于对不同数据库的访问限制,以满足不同用户的要求.下面就分别讨论,供大家参考.    一.MySQL修改密码方法总结  首先要说明一点的是:一般情况下,修改MySQL密码是需要有mysql里的root权限的,这样一般用户是无法更改密码的,除非请求管理员帮助修改.    方法一    使用phpMyAdmin  (图形化管理MySql数据库的

  • MySQL中因一个双引号错位引发的血案详析

    一.前言 最近经常碰到开发误删除误更新数据,这不,他们又给我找了个麻烦,我们来看下整个过程. 二.过程 由于开发需要在生产环节中修复数据,需要执行120条SQL语句,需要将数据进行更新 于是开发连上了生产数据库,首先执行了第一条SQL update tablename set source_name = "bj1062-北京市朝阳区常营北辰福第" where source_name = "-北京市朝阳区常营北辰福第" 我们仔细看了下,这个SQL,的确没有什么问题,w

  • MySQL中or、in、union与索引优化详析

    本文缘起自<一分钟了解索引技巧>的作业题. 假设订单业务表结构为: order(oid, date, uid, status, money, time, -) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照date查询 uid,用户ID,有普通索引,用户查询自己订单 status,订单状态,有普通索引,管理后台经常按照status查询 money/time,订单金额/时间,被查询字段,无索引 - 假设订单有三种状态:0已下单,1已支付,2已完成 业务需求,查询

  • Mysql中where与on的区别及何时使用详析

    之前在写连表查询的时候,老是分不清楚where和on的区别,导致有时写的SQL会出现一点小的问题,这里专门写篇文章做下记录,如果你也分不清,那么请参考 二者的区别及什么时候使用 说明:区分on和where首先我们将连接分为内部连接和非内部连接,内部连接时on和where的作用是一样的,通常我们分不清它们的区别说的是非内部连接 一般on用来连接两个表,只的是连接的条件,在内部连接时,可以省略on,此时它表示的是两个表的笛卡尔积:使用on连接后,mysql会生成一张临时表,而where就是在临时表的

  • mysql update case 更新字段值不固定的操作

    在处理批量更新某些数据的时候,如果跟你更新的字段的值都一样,比如某个状态都更新为某个固定值, 直接用update table set xxx=xxx where xxx=xxx 这种即可 如果要更新的字段的值是不固定的,用下面的update case when where 这种方式就更方便了 UPDATE tablename set a1= CASE userid WHEN 1 THEN a1+5 WHEN 2 THEN a1+2 END, a2= CASE userid WHEN 1 THEN

  • SqlServer Mysql数据库修改自增列的值及相应问题的解决方案

    SQL Server 平台修改自增列值 由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 '自增列名称').sql server我测试是2008.2012和2014,都不允许变更自增列值,我相信SQL Server 2005+的环境均不允许变更字段列值. 如果非要在SQL Server 平台修改自增列值的,那就手动需要自增列属性,然后修改该列值,修改成功后再手动添加自增列属性.如果在生成环境修改

  • MySQL如何修改账号的IP限制条件详解

    前言 最近在工作中遇到一个需求:修改MySQL用户的权限,需要限制特定IP地址才能访问,第一次遇到这类需求,结果在测试过程,使用更新系统权限报发现出现了一些问题, 具体演示如下. 注意:下面测试环境为MySQL 5.6.20. 如有其它版本与下面测试结果有出入,请以实际环境为准. 我们先创建一个测试用户LimitIP,只允许192.168段的IP地址访问,具体权限如下所示: mysql> GRANT SELECT ON MyDB.* TO LimitIP@'192.168.%' IDENTIFI

  • 如何使用MySQL一个表中的字段更新另一个表中字段

    1,修改1列 update student s, city c set s.city_name = c.name where s.city_code = c.code; 2,修改多个列 update a, b set a.title=b.title, a.name=b.name where a.id=b.id •子查询 update student s set city_name = (select name from city where code = s.city_code); oracle

随机推荐