MySQL:update set的坑

2023-12-13 21:52:13

目录

一、问题描述

二、为何会出现这样的问题?

三、正确的方案


一、问题描述

我在修改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;

原始值:

修改命令执行后:

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


我是程序员娟娟,

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

分享给更多需要的同行。

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

文章来源:https://blog.csdn.net/djj1015591892/article/details/134838317
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。