SQL语句中Where条件后写上1=1是什么意思

76次阅读
没有评论

共计 1955 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章主要讲解了“SQL 语句中 Where 条件后写上 1 = 1 是什么意思”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“SQL 语句中 Where 条件后写上 1 = 1 是什么意思”吧!

SQL 注入

初次看到这种写法的同学肯定很纳闷,加不加 where 1=1,查询不都一样吗? 例如:

select * from customers;  与  select * from customers where 1=1;

查询出来的结果完全没有区别呀。

是的,上面的查询结果是没有区别,但是这并不是我们要添加它的目的。我们知道 1 = 1 表示 true,即永真,在 SQL 注入时配合 or 运算符会得到意向不到的结果。

例如,当我们要删除客户名称为“张三”的记录,我们可以这样写:

delete from customers where name= 张三 

这个时候如果在 where 语句后面加上 or 1= 1 会是什么后果?

即:

delete from customers where name= 张三  or 1=1

本来只要删除张三的记录,结果因为添加了 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  }

如果我们不写 1 = 1 的话,当 condition 1 为真时,代码拼接后被执行的 SQL 代码如下:

select * from table_name where and var2=value2;

很明显,这里会出现一个 SQL 的语法错误:and 必须前后都有条件。

有人说我直接把 where 写在 if 语句里面,我就不写 where 1=1。

String sql= select * from table_name  if( condition 1) { sql=sql+  where var2=value2   } if(condition 2) { sql=sql+  where var3=value3  }

当 condition 1 为真,condition 2 为假时,上面被执行的 SQL 代码为:

select * from table_name where var2=value2;

这个确实没有语法错误,但是当 condition 1 和 condition 2 都为真呢? 那么 SQL 语句就变成了这样:

select * from table_name where var2=value2 where var3=value3;

很明显这是不符合 SQL 语法规范的。

这里写上 where 1=1 是为了避免 where 关键字后面的第一个词直接就是  “and”而导致语法错误,加上 1 = 1 后,不管后面有没有 and 条件都不会造成语法错误了。

拷贝表

在我们进行数据备份时,也经常使用到 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;

1= 1 的坏处

我们在写 SQL 时,加上了 1 = 1 后虽然可以保证语法不会出错!

select * from table where 1=1

但是因为 table 中根本就没有名称为 1 的字段,该 SQL 其实等效于 select * from  table,这个 SQL 语句很明显是全表扫描,需要大量的 IO 操作,数据量越大越慢。

所以在查询时,where1= 1 的后面需要增加其它条件,并且给这些条件建立适当的索引,效率就会大大提高。

感谢各位的阅读,以上就是“SQL 语句中 Where 条件后写上 1 = 1 是什么意思”的内容了,经过本文的学习后,相信大家对 SQL 语句中 Where 条件后写上 1 = 1 是什么意思这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计1955字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)