为什么SET后的AND不是mysql中的语法错误?

daupos2t  于 2023-01-01  发布在  Mysql
关注(0)|答案(2)|浏览(156)

令我惊讶的是,这不是语法错误:

UPDATE mytable  
SET deleted = 1 
AND name  = 'Cindy'

这并不影响命令的结果,在SET后面加上AND有什么用吗?或者mysqsl会忽略它?

xxhby3vn

xxhby3vn1#

因为表达式:
是一个布尔表达式,对于False,其计算结果为0;对于True,其计算结果为1,并且此表达式的值将被赋给列deleted,如下所示:

SET deleted = (1 AND (name = 'Cindy'))
sgtfey8w

sgtfey8w2#

该语句考虑了operators precedence。查询的作用如下

UPDATE mytable  
SET deleted = (1 AND (name  = 'Cindy'))

即,首先测试条件name = 'Cindy',产生真(1)、假(0)或空。
然后计算表达式1 AND {result}
最后,将该表达式求值的结果赋给deleted列。
DEMO fiddle
如果收到与相同的结果

UPDATE mytable  
SET deleted = 1

则使用当前排序规则,name列值等于'Cindy'

相关问题