你是否遇到这样的情况:在MySQL里面update一条记录,语法都正确的,但记录并没有被更新…

比如如下SQL语句:

update apps set code="123" and name ="李四" where code="234" and name ="张三";

执行之前,code=234,name=张三。但执行之后变成code=0,name=张三。

这是为什么呢?其实并不是无效,而是更新了code字段为0了。

mysql update更新为0原因

MySQL官方文档的update语法:

mysql update更新无效,结果为0问题处理插图

assignment_list的格式是以逗号分隔的col_name=value列表,是不是找到原因了?因为上面set语句后面使用了“and”而不是“,”。

正确的写法应该如下:

update apps set code="123" , name ="李四" where code="234" and name ="张三";

再次执行,结果正常。那么为什么上面的语句可以执行成功,但结果不对呢?

update为0,原因分析

其实,最上面的SQL语句等价于下面的SQL语句:

update apps set code= ("123" and name ="李四") where code="234" and name ="张三";

那么,在满足where后面条件之后,前面set只设置code的值为括号里面的and的结果,是一个逻辑表达式。因为档期name为“张三”,因此结果为false,false在MySQL中等价于0!

因此,code被更新为0。

原文链接:《mysql update更新无效,结果为0问题处理

mysql update更新无效,结果为0问题处理插图(1)
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注