2012-12-30 15 views
3

我正在浏览MySQL文档中有关此更新的内容。 See UPDATE Syntax。我发现语法更新使用AND代替COMMA时语句不会产生语法错误

UPDATE [LOW_PRIORITY] [IGNORE] table_reference 
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
    [WHERE where_condition] 
    [ORDER BY ...] 
    [LIMIT row_count] 

当我执行该语句

UPDATE SampleTB 
SET NAME = '123' AND Address = '456' 
WHERE ID = 1; 

See Here for SQL Fiddle Demonstration Link

查询成功执行和Name值为0。我期待查询语法错误。

有人可以向我解释为什么它不会产生错误?为什么该栏的新值是zero而不是123

回答

8
SET NAME = '123' AND Address = '456' 

进行解析,以这样的:

SET NAME = ('123' AND (Address = '456')) 

这是一个比较和布尔字符串和布尔操作数AND

因此,需要对当前行的Address列值,把它比作一个'456'字符串和比较的结果被用作AND'123' AND false

+0

啊第二个操作数,这样是它在'MySQL'的行为,因为它将不会在'SQL Server'中执行。谢谢你的澄清。 – Walter

+1

@dara saquin:mysql在其隐式类型转换中非常不明显,是的:-) – zerkms

+0

hehe再次感谢你':D'有一个愉快的一天先生。 – Walter