点击关注上方“SQL数据库开发”,
设为“置顶或星标”,第一时间送达干货 SQL专栏 SQL基础知识第二版
SQL高级知识第二版
程序员在编程过程中,经常会在代码中使用到“where 1=1”,这是为什么呢?
SQL注入
select * from customers;
与
select * from customers where 1=1;
查询出来的结果完全没有区别呀。
是的,上面的查询结果是没有区别,但是这并不是我们要添加它的目的。我们知道1=1表示true,即永真,在SQL注入时配合or运算符会得到意向不到的结果。
delete from customers where name='张三'
delete from customers where name='张三' or 1=1
当然这种事我们可千万不能干,也不能让别人有机可乘,这里只是为了表述where 1=1的作用之一。
语法规范
我们在写代码的过程中,为了保证语法规范的时候,也会使用到where 1=1。
我们先看下面这段Java代码:
String sql="select * from table_name where 1=1";
if( condition 1) {
sql=sql+" and var2=value2";
}
if(condition 2) {
sql=sql+" and var3=value3";
}
select * from table_name where and var2=value2;
String sql="select * from table_name";
if( condition 1) {
sql=sql+" where var2=value2 ";
}
if(condition 2) {
sql=sql+" where var3=value3";
}
select * from table_name where var2=value2;
select * from table_name
where var2=value2
where var3=value3;
在我们进行数据备份时,也经常使用到where 1=1,当然其实这两可以不写,写上之后如果想过滤一些数据再备份会比较方便,直接在后面添加and条件即可。
create table table_name
as
select * from Source_table
where 1=1;
复制表结构
有1=1就会有1<>1或1=2之类的永假的条件,这个在拷贝表的时候,加上where 1<>1,意思就是没有任何一条记录符合条件,这样我们就可以只拷贝表结构,不拷贝数据了。
create table table_name
as
select * from
Source_table where 1 <> 1;
最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。 有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行 数据前线 后台回复关键字:1024,获取一份精心整理的技术干货 后台回复关键字:进群,带你进入高手如云的交流群。 推荐阅读