sql语句not and or执行顺序

前言

今天的代码中很悲催的出现了信息泄漏的情况,开始我怎么都不肯相信,首先自信自己的编程技术,其次自信自己对业务逻辑的理解,最后彻查代码的时候,却发现问题出现在sql语句的逻辑判断上,这里记录一下吧

sql语句逻辑运算符优先级

首先,sql语句中逻辑运算符优先级跟c一样,not > and > or (c里面是 ! > && > || )

举例说明

select * from table_name where a = 1 and b = 2 or c =  3;


我的本意:

在table_name表里选择a = 1 并且 (b = 2 或者 c = 3)的结果集,但是结果肯定不和我想的一样,结果集是 (a = 1 并且 b =2 ) 的结果集或者 c = 3的结果集


因为sql的执行顺序为:

select * from table_name where (a = 1 and b = 2) or c = 3;

如果想达到我想的效果:

select * from table_name where a = 1 and (b = 2 or c = 3);


注意

  • 在写c或者php代码时,我们为了代码简洁或者为了炫技竟然通过&& || !各种组合达到我们想要的结果,但是写sql语句的时候还是小心一些为好,毕竟sql注入也就是这个原理
  • sql里多用()来改变执行顺序,达到自己想要的结果比较好



你可能感兴趣的:(sql语句not and or执行顺序)