天天看点

mysql insert update 同时执行_关于MySQL的执行UPDATE语句错误的使用“和”替代“”作为连接符...

mysql insert update 同时执行_关于MySQL的执行UPDATE语句错误的使用“和”替代“”作为连接符...

正确的UPDATE语句:

UPDATE table_name 
SET column1 = value1,column2 = value2,... 
WHERE condition_column = condition_value
           

错误的写成:

UPDATE table_name SET column1 = value1 AND column2 = value2 WHERE condition_column = condition_value
           

这造成了一些小麻烦

举例:

CREATE TABLE`user`(
`id` int(5)NOT NULL AUTO_INCREMENT,
`user_name` varchar(500)NOT NULL DEFAULT'',
`age` tinyint(4)NOT NULL 
DEFAULT'0 ',PRIMARY KEY(`id` )
)ENGINE = InnoDB DEFAULT CHARSET = utf8
           

新增一条记录

INSERT INTO user(user_name,age)VALUES('zhangsan',20);
           
mysql insert update 同时执行_关于MySQL的执行UPDATE语句错误的使用“和”替代“”作为连接符...

执行错误的UPDATE语句

UPDATE用户SET年龄= 30 AND user_name ='lisi'WHERE id = 1
           

期望结果是将ID = 1的这条记录中USER_NAME列更新为“丽丝”,年龄列更新为“30”

然而实际执行结果

mysql insert update 同时执行_关于MySQL的执行UPDATE语句错误的使用“和”替代“”作为连接符...

实际结果是USER_NAME字段没有被更新,年龄字段则被更新成了0

在执行一条语句

UPDATE用户SET年龄= 30 AND user_name ='zhangsan'WHERE id = 1
           

这次执行的语句与之前唯一不同的是这次要更新的用户名与当前行中的用户名值相同

mysql insert update 同时执行_关于MySQL的执行UPDATE语句错误的使用“和”替代“”作为连接符...

年龄字段变成了1

MySQL的解析逻辑30与user_name ='zhangsan'

第一次user_name ='lisi',假,所以更新为0

第二次user_name ='zhangsan',真,所以更新为1

我们利用查询语句也能得出结论

SELECT 30 AND user_name ='zhangsan'column1,30&user_name ='lisi'column2 FROM user
           
mysql insert update 同时执行_关于MySQL的执行UPDATE语句错误的使用“和”替代“”作为连接符...