令我惊讶的是,这不是语法错误:
UPDATE mytable SET deleted = 1 AND name = 'Cindy'
这并不影响命令的结果,在SET后面加上AND有什么用吗?或者mysqsl会忽略它?
SET
AND
xxhby3vn1#
因为表达式:是一个布尔表达式,对于False,其计算结果为0;对于True,其计算结果为1,并且此表达式的值将被赋给列deleted,如下所示:
False
0
True
1
deleted
SET deleted = (1 AND (name = 'Cindy'))
sgtfey8w2#
该语句考虑了operators precedence。查询的作用如下
UPDATE mytable SET deleted = (1 AND (name = 'Cindy'))
即,首先测试条件name = 'Cindy',产生真(1)、假(0)或空。然后计算表达式1 AND {result}。最后,将该表达式求值的结果赋给deleted列。DEMO fiddle如果收到与相同的结果
name = 'Cindy'
1 AND {result}
UPDATE mytable SET deleted = 1
则使用当前排序规则,name列值等于'Cindy'。
name
'Cindy'
2条答案
按热度按时间xxhby3vn1#
因为表达式:
是一个布尔表达式,对于
False
,其计算结果为0
;对于True
,其计算结果为1
,并且此表达式的值将被赋给列deleted
,如下所示:sgtfey8w2#
该语句考虑了operators precedence。查询的作用如下
即,首先测试条件
name = 'Cindy'
,产生真(1)、假(0)或空。然后计算表达式
1 AND {result}
。最后,将该表达式求值的结果赋给
deleted
列。DEMO fiddle
如果收到与相同的结果
则使用当前排序规则,
name
列值等于'Cindy'
。