MySQL:update set的坑
目录
一、问题描述
二、为何会出现这样的问题?
三、正确的方案
一、问题描述
我在修改mysql数据表时,看到下面的现象。
我表中原始数据如下:
执行了下面的修改,显示执行成功。
update user_function_record_entity
set open_id = 8 and reason = '已修改' and create_time = now()
where id = 2;
再次查询数据如下:
从修改后的数据看,不是我预期的结果,为什么呢?
下面就来分析分析。
二、为何会出现这样的问题?
首先,其根本问题在于 set 后用了 and 。
因为 set 的语法是,当修改多个值时,是用英文逗号间隔,而不是and间隔。
那为什么在执行命令时,没有提示错误呢。
因为带了and的命令,其真实执行逻辑如下
update user_function_record_entity
set open_id = (8 and reason = '已修改' and create_time = now())
where id = 2;
因为 (8 and reason = '已修改' and create_time = now()) 通过逻辑运算是false,
所以,才会把 open_id 设置为 0 。
三、正确的方案
正确的命令如下
update user_function_record_entity
set open_id = 8, reason = '已修改', create_time = now()
where id = 2;
原始值:
修改命令执行后:
所以,为了避免这样的坑,记住正确的命令格式。这个坑一般真的很难发现。
我是程序员娟娟,
致力将工作中遇到的问题和解决方案记录下来,
分享给更多需要的同行。
如果对你有帮助,不妨点个关注吧!