今天一个开发反馈update某行但不生效,场景如下:
mysql> select * from test;
+------+------+
| c1 | c2 |
+------+------+
| 0 | a |
+------+------+
他想将c1列的值改成1、c2的值改成'b',然后用了如下sql:
update test set c1=1 and c2='b' where c1=0;
可以发现这个sql写法是错误的,正确写法应该是:
update test set c1=1,c2='b' where c1=0;
但第一个错误的sql运行没报错,因为被MySQL理解成:
update test set c1=(1 and c2='b') where c1=0;
=>
update test set c1=(1 and 0) where c1=0;
==>
update test set c1=0 where c1=0;
所以错误的sql相当啥都不做,但不仔细观察and应该改成逗号,还会觉得蛮诡异呢~
网友评论