MySQL命令行窗口执行update语句,受影响行数为1,但没有得到预期效果
背景
- 业务场景:调整业务逻辑,在某更新SQL语句加入一个字段,正式代码没有得到预期效果,拿到命令行中手动执行也没有得到预期效果。
问题描述
表中某条数据的type为1,label为3,需要修改成0,2.
SQL语句大概是这样:
update a_log
set type = 0 and label = 2
where id = 3;
在控制台执行后,提示受影响的行为1,用连接工具打开表一看,type字段改成预期值0了,但是label却没有任何变化。
分析
首先我要说,这SQL语言实在是太蹩脚了,我无法理解SQL语句的结构,其中的优先级、作用范围、执行顺序更是毫无概念,新增、更新、删除、查询使用的关键词和结构都不一样,明明就4类语句,为啥非得写成不一样的?
再有一个就是这个idea属实也有点坑,这里的update语句set多个字段,应该用逗号“,”分隔(太易忽略),然而我写完一个字段接着写a的时候,它竟然能提示我and,我写完这条语句也没有报错。
然后就是这个MySQL不知道是哪里留下来的天坑,类型太弱了(我实际的数据类型不是数字),就算这里and可以计算得出一个布尔值,那和定义类型不一致就不能报个错?提示一下也行啊?
因为我要的是type=0,实际上这也是一个坑,因为数据库里的0不是我SQL写的0,而是 “0 and label = 2”计算出来的,因为如果写“type = 1
and label = 1”也会得到同样的效果。
当然,上边的结果只是我的猜测,也可能不是我说的这样算的,没太多时间深究,必须加快节奏,先记下来再说,虽然记的可能是垃圾,但是不记永远是空中楼阁。
其实and你看成是逻辑运算符吧?也不行,因为between里就不是这么回事。一个关键词穿插包含另一个关键词太难受了,其实是和汉语语境不对应,才无法理解。
解决方案
其实很简单,and换成逗号“,”就行了,update语句的定义就是这么写的。
update a_log
set type = 0,
label = 2
where id = 3;
再有一点是应该多留意数据类型。(但是SQL好像没办法查看数据类型?用idea工具看的时候只能看到实表字段类型,虚表字段只能看到定义式,看不到类型)
声明:本文使用八爪鱼rpa工具从gitee自动搬运本人原创(或摘录,会备注出处)博客,如版式错乱请评论私信,如情况紧急或久未回复请致邮 xkm.0jiejie0@qq.com 并备注原委;引用本人笔记的链接正常情况下均可访问,如打不开请查看该链接末尾的笔记标题(右击链接文本,点击 复制链接地址,在文本编辑工具粘贴查看,也可在搜索框粘贴后直接编辑然后搜索),在本人博客手动搜索该标题即可;如遇任何问题,或有更佳方案,欢迎与我沟通!