一个错误的sql语句引发的思考--Mysql AND逻辑运算

今天讨论一个错误的update语句

1
UPDATE test SET id=2 AND dd=2 WHERE id=1;

这个语句竟然可以被执行,当然,执行结果是错误的。

猜测是被解析成如下语法了

1
UPDATE test SET id=(2 AND dd=2) WHERE id=1;

然后进行试验,发现果然是这样的。

对于这样sql语句,执行后的数据,id只可能为0或者1,因为mysql中,and的运算结果只有0和1

在mysql中,and的左右两侧如果都是非0和非NULL值的话,返回1,否则返回0


  • 表结构
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `dd` tinyint(1) DEFAULT NULL,
    `nickname` varchar(12) DEFAULT '1',
    PRIMARY KEY (`id`),
    KEY `idx_1` (`nickname`)
    ) ENGINE=InnoDB

And逻辑