深入理解where 1=1的用处_Mysql

where 1=1有什么用?在SQL语言中,写这么一句话就跟没写一样。

select * from table1 where 1=1与select * from table1完全没有区别,甚至还有其他许多写法,1<>2,'a'='a','a'<>'b',其目的就只有一个,where 的条件为永真,得到的结果就是未加约束条件的。

在SQL注入时会用到这个,例如select * from table1 where name='lala'给强行加上select * from table1 where name='lala' or 1=1这就又变成了无约束的查询了。

最近发现的妙用在于,在不定数量查询条件情况下,1=1可以很方便的规范语句。例如一个查询可能有name,age,height,weight约束,也可能没有,那该如何处理呢?

String sql=select * from table1 where 1=1

为什么要写多余的1=1?马上就知道了。

复制代码 代码如下:

if(!name.equals("")){
sql=sql+"name='"+name+"'";
}
if(!age.equals("")){
sql=sql+"age'"+age+"'";
}
if(!height.equals("")){
sql=sql+"height='"+height+"'";
}
if(!weight.equals("")){
sql=sql+"weight='"+weight+"'";
}

如果不写1=1呢,那么在每一个不为空的查询条件面前,都必须判断有没有where字句,否则要在第一个出现的地方加where

where 1=1的写法是为了检化程序中对条件的检测
打个比方有三个参数a, b, c
@sql=select * from tb'
这三个参数都可能为空
这时你要构造语句的话,一个个检测再写语句就麻烦
比如
if @a is not null
@sql=@sql + " where a=' + @a
if @b is not null
这里你怎么写?要不要加where 或直接用 and ?,你这里还要对@a是否为空进行检测

用上 where 1=1 之后,就不存在这样的问题, 条件是 and 就直接and ,是or就直接接 or

拷贝表
create   table_name   as   select   *   from   Source_table   where   1=1;

复制表结构
create   table_name   as   select   *   from   Source_table   where   1 <> 1;

时间: 2024-09-11 17:03:53

深入理解where 1=1的用处_Mysql的相关文章

深入理解MySQL中的事务机制_Mysql

 使用数据库事务可以确保除事务性单元内的所有操作都成功完成.MySQL中的InnoDB引擎的表才支持transaction.在一个事务里,如果出现一个数据库操作失败了,事务内的所有操作将被回滚,数据库将会回到事务前的初始状态.有一些不能被回滚的语句:将在本文的最后讨论. 在一个web应用中,会很经常遇到需要使用事务的地方,要么希望若干语句都执行成功,要么都不执行,如果出现有些执行成功,而其他的失败将会导致数据损坏. 在这篇文章的例子中,我们使用下面的两张表"employee"和&quo

Microsoft FrontPage XP使用技巧-打造一个新的天堂

frontpage|技巧 网页制作是什么? 网页制作就是根据网页效果图,把它实现成浏览器中可以浏览的网页.我们已经使用过或者听别人介绍过很多的网页制作工具.FrontPage,Dreamweaver,GoLive等等这些都是我们平常所知道的网页设计软件,而FrontPage毫无疑问是一个简单易用,功能强大的网页制作工具.如今FrontPage推出了新的版本,他依旧是和Office 一起推出的,不过不同于以往的是,新版本Office系列软件不再是以年份来命名了,使用了新的命名方式,MicroSof

Zero:分析麦包包的关键词策略与降权的应对措施

这段时间麦包包的例子四处可见.原因主要是一开始搜索"淘宝网"."开心网",能够搜索到麦包包.然后最近又加入了"支付宝". 但是最近两天,麦包包不幸的这些关键词的排名全部下滑.据观测,不像是平常的K站之类的,收录没有很大变化,长尾的排名也是.应该只是这三个热门词的排名,被百度人为降权了. 负责麦包包在线营销的Robin想必头疼了点,但这并不会对麦包包造成太大的影响.或许有人不解,为什么三个搜索量这么大的词排名下去了会影响不大?这个我们应该深入的看本

FrontPage XP建站基础教程4

frontpage|基础教程 FrontPage XP中能插入的表单有所改善,能插入的类型如图十一所示,其中一些在其他网页制作工具里很难达到的效果都可以通过很简单的操作完成,如文件上载,试想想看,如果在Dreamweaver里面做这个效果,你会如何办了?在FrontPage XP里,当然简单了,你只需要点击一个按钮,然后剩下的一切操作都交给FrontPage XP了. 图十一的左下角显示的就是插入的文件上载的表单的显示,在选中这个表单以后通过表单属性就可以设置这个表单提交的内容是提交到一个文件,

FrontPage XP基础教程(4)

FrontPage XP中能插入的表单有所改善,能插入的类型如图十一所示,其中一些在其他网页制作工具里很难达到的效果都可以通过很简单的操作完成,如文件上载,试想想看,如果在Dreamweaver里面做这个效果,你会如何办了?在FrontPage XP里,当然简单了,你只需要点击一个按钮,然后剩下的一切操作都交给FrontPage XP了. 图十一的左下角显示的就是插入的文件上载的表单的显示,在选中这个表单以后通过表单属性就可以设置这个表单提交的内容是提交到一个文件,一个Email地址,或者直接放

如何创建ZBrush“双重动作”笔刷

  "双重动作"笔刷,并非ZBrush的最新功能,而是给放置这种笔刷的文件夹所命的名字,之所以称其为"双重动作"笔刷,是因为它们可以通过使用一种笔触产生两种效果. ZBrush允许修改并创建自己的笔刷,但实现平滑工作流的关键是理解笔刷的真正用处,在接下来的内容里,小编将向大家展示4个笔刷修改器的特效,以及如何使用它们创建非常特殊的笔刷. 以下是其中一个修改的笔刷,用来创建皮肤毛孔,同时保持表面平滑: 下面的这个,表现有所不同,展示的细节更多,更适合于生物凹凸不平的皮

ZBrush“双重动作”笔刷实例教程

  ZBrush允许修改并创建自己的笔刷,但实现平滑工作流的关键是理解笔刷的真正用处,在接下来的内容里,小编将向大家展示4个笔刷修改器的特效,以及如何使用它们创建非常特殊的笔刷. 以下是其中一个修改的笔刷,用来创建皮肤毛孔,同时保持表面平滑: 下面的这个,表现有所不同,展示的细节更多,更适合于生物凹凸不平的皮肤: 下面这张图展示了"双重动作"笔刷的实际应用: 下图是"双重动作"笔刷特效应用生成的两个球体,部分颜色使用ZBrush BPR渲染. 以下动图展示了细化的皮

Java内存溢出(OOM)异常完全指南

我的职业生涯中见过数以千计的内存溢出异常均与下文中的8种情况相关.本文分析什么情况会导致这些异常出现,提供示例代码的同时为您提供解决指南. 这也许是目前最为完整的Java OOM异常的解决指南. 1.java.lang.OutOfMemoryError:Java heap space Java应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:Heap space(堆空间)和Permgen(永久代): JVM内存模型示意图 这两个区域的大小可以在JVM(Java虚拟机)启动时通过参

《Docker进阶与实战》——2.4节SparkContext概述

2.4 Namespace介绍2.4.1 Namespace是什么 Namespace是将内核的全局资源做封装,使得每个Namespace都有一份独立的资源,因此不同的进程在各自的Namespace内对同一种资源的使用不会互相干扰. 这样的解释可能不清楚,举个例子,执行sethostname这个系统调用时,可以改变系统的主机名,这个主机名就是一个内核的全局资源.内核通过实现UTS Namespace,可以将不同的进程分隔在不同的UTS Namespace中,在某个Namespace修改主机名时,