MySQL这样写UPDATE语句,劝退
来源:ju.outofmemory.cn/entry/336774
起因
最近,好几次有开发同学在钉钉上问我,比如下图:
update apps set owner_code='43212' and owner_name='李四' where owner_code='13245' and owner_name='张三';
执行之前的记录是这样的:
执行之后的记录是这样的:搜索公众号互联网架构师复“2T”,送你一份惊喜礼包。
可以看到,结果并不像这位开发同学说的“好像没有效果”,实际上是有效果的:
owner_name的值没有变,但owner_code变成了0!
看起来,语法是完全没有问题,翻了翻MySQL官方文档的update语法:
update apps set owner_code='43212' , owner_name='李四' where owner_code='13245' and owner_name='张三';
后记:后面等有空的时候,又回过头来看了一下,为什么使用“AND”分隔的时候,会出现owner_code=0的奇怪结果?多次尝试之后发现:搜索公众号互联网架构师复“2T”,送你一份惊喜礼包。
update apps set owner_code='43212' and owner_name='李四' where owner_code='13245' and owner_name='张三';
等价于:
update apps set owner_code=('43212' and owner_name='李四') where owner_code='13245' and owner_name='张三';
评论