我们平常写sql更新数据,常见都是下面这种吧
update student set no = '1', name = '张xx' where row_id = 3;但你是否有注意到,下面这条语句也是可以更新数据的
update student set no = '1' and name = '张xx' where row_id = 3;可能有朋友已经踩过这个坑,在mysql中,才会遇到这个问题,因为sqlserver和oracle这么写是会提示语法错误的。下面来看下mysql中这个and到底是何用意:
还是和上面一样,更新student表中row_id为3的这条数据的no和name字段,这条数据原本的值no是12,name是张天王,原始值如下图
先查询看看原始值
执行更新语句,set语句中no为13,name为张xx
执行更新语句,set语句中no为13,name为张天王
通过上面,我们可以看出,执行update语句时,no的值始终没有被更新成13,而是分别更新成了0和1,其中更新为0时name值为 张xx ,更新为1时name值为 张天王。
从中可以发现,and似乎可以理解为一种运算符(与)。name = '张xx' 时与数据库中 name = '张天王' 不同,所以为false,在代码中false对应的值就是0。name = '张天王' 时与数据库中的 name = '张天王'相同,所以为true,在代码中true对于的值就是1。
所以,在mysql中发现,如果set语句中用了and,千万别理解错了,它是不同于使用逗号连接的更新操作的,上诉正确的更新操作应该是
update student set no = '13' , name = '张xx' where row_id = 3问题虽然简单,但也是是一个知识点,没遇到可能不会注意到这个问题,遇到了不踩坑就行哈。