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;

原始值:

修改命令执行后:

所以,为了避免这样的坑,记住正确的命令格式。这个坑一般真的很难发现


我是程序员娟娟,

致力将工作中遇到的问题和解决方案记录下来,

分享给更多需要的同行。

如果对你有帮助,不妨点个关注吧!