前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL UPDATE “经典”坑

MySQL UPDATE “经典”坑

作者头像
php007
发布2019-08-05 15:11:22
2.8K0
发布2019-08-05 15:11:22
举报
文章被收录于专栏:PHP专享栏PHP专享栏

快点关注我们吧

最近好几次有开发同学在钉钉上问我,比如下图

问题介绍

问题归纳起来就是:在MySQL里面update一条记录,语法都正确的,但记录并没有被更新...

刚遇到这个问题的时候,我拿到这条语句直接在测试库里面执行了一把,发现确实有问题,但和开发描述的还是 有区别 ,这里我用测试数据来模拟下:

低角度的解析

刚遇到这个问题的时候,我拿到这条语句直接在测试库里面执行了一把,发现确实有问题,但和开发描述的还是 有区别 ,这里我用测试数据来模拟下:

有问题的SQL语句

img

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

img

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

img

可以看到,结果并不像这位开发同学说的“好像没有效果”,实际上是有效果的:

img

why?

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

img

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

img

倒回去再重试验一把

img

果然,这下得到了想要的结果!

总结技巧

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

**后记 :**后面等有空的时候,又回过头来看了一下,为什么使用“AND”分隔的时候,会出现owner_code=0的奇怪结果?多次尝试之后发现:

img

等价于:

img

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

end

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 风帆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有问题的SQL语句
  • why?
  • 倒回去再重试验一把
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档