首先看看完整的表如下图
那么看看一个比较奇葩的语句
select * from users where name = 'aa'='bb'
这个语句为啥能执行成功以及为什么打印出了除了两个aa之外的所有行数据呢。我们来解释一下原理。
当我们使用 where 语句的时候, where是会一行一行的匹配的 ,同时where的执行顺序是从左到右的
拿第一行举例 在表中 第一行的name是aa 也就是说 where后面的语句变成了 'aa'='aa'='bb' 因为aa是等于aa所以'aa'='aa'转化为1,语句就变成了 1='bb' 由于int和string进行比较都会自动转化成为float,bb隐式转换会变成0,也就是说1='bb'变成了1=0,结果当然是 false 也就是 0 所以第一行就不会被选中。
但是第二行 'bb'='aa'='bb' 转化为 0='bb' 再转化为 0=0 结果是true也就是 1,所以第二行会被选中。
以此类推。