在开发中对于SQL使用where 1=1的优点是非常明显的。
原因是由于在实际开发中对于SQL的书写一般都是通过代码中的逻辑判断来进行SQL的拼接,主要拼接的位置是在where语句后面的判断筛选条件。
使用where 1=1的原因是这是一个永远成立的判断条件。
如果我们在SQL中没有使用where 1=1这个语句,那么在没有语句需要拼接的时候,SQL中就会多出一个关键词“where”,后面因为逻辑不符合所以全都没有进行拼接,就会出现类似的SQL:
select *from user where
然后后面都没有了,这个SQL就是错的,当然,通过代码的逻辑判断去最后进行该SQL的规范化也是可以的,但是明显会使开发变得复杂起来,还有很大的几率出现SQL的错误。那如果使用了where 1=1会是什么情况呢,如下所示:
select * from user where 1=1
该SQL本质上等价于
select * from user
所以SQL的安全性比较好
后面对于该SQL的继续拼接如下:
sqlStr="select * from user where 1=1";
if(age>20){
sqlStr+="and user_age='age'";
}
else if(name="张三"){
sqlstr+="and user_name='name'";
}
同理,where 1=0这个表达式永远为false,所以如下语句永远不会真正的去查询表中的数据,只用于快速返回当前表的结构(即获取表中的属性):
select * from user where 1=0;