iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中where 1=1方法的使用及改进
  • 648
分享到

MySQL中where 1=1方法的使用及改进

2024-04-02 19:04:59 648人浏览 八月长安
摘要

目录背景where 1=1的作用where 1<>1where 1=1的性能问题where 1=1的改进小结背景 刚入行的同学,看

背景

刚入行的同学,看到在sql语句中出现where 1 = 1这样的条件可能会有所困惑,而长时间这样使用的朋友可能又习以为常。那么,你是否还记得当初为什么要这样写?是否有性能问题?有没有更好的写法?

今天这篇文章,带大家从头到尾梳理一下where 1 = 1的使用及改进,或许你能从中得到更多意想不到的收获。

where 1=1的作用

如果要问在SQL语句的where条件中多加1=1目的是什么,很简单:使得where条件语句永远为真。本质上就是虽然加了where条件,但实际上永远为真,也就相当于没有加任何约束条件。

使用该语句的场景主要是:动态构建SQL语句

String sql  =  "select * from t_user  where 1=1 "; 
if(!b.equals("")){
  sql += "and  b='"+b+"'";
}   

在上述语句拼写时,使用where 1=1,当b不等于空时,可以直接拼接“and”语句,而不会导致语法错误。如果没有where 1=1,原来的SQL语句就变成(假设b传入了"abc"):

"select * from t_user  where and  b= 'abc' "; 

很明显,上述SQL语句会有语法错误。所以,之所以添加1=1,就是为了方便SQL拼接。

从另外一个角度来讲,不仅仅1=1可以这样使用,像:1<>22>1'a'='a'等表达式,只要结果为true,都可以如此使用。

where 1<>1

上面讲了where 1=1的来历及使用,那么你是否使用过where 1<>1的形式呢?

你还别说,where 1<>1也是有使用场景的,比如:只获取表结构而不取数据。

create table t_temp as select * from t_user  where 1<>1

上述语句,创建了一个与t_user表结构一样但没有任何数据的新表t_temp。

当然,除了表结构,其他的结构也可以如此使用。

where 1=1的性能问题

有人说,使用where 1=1可能会有性能问题,咱们直接来实验一下。

mysql 8.0.18,t_user表,id_no字段有索引:

explain select * from t_user where id_no = 'Tom25';
explain select * from t_user where 1=1 and id_no = 'Tom25';

执行上述两行SQL语句,explain结果都是如下:

也就是说,1=1这样条件,并不影响索引和性能,从explain结果上可以看出两者并无本质区别。

之所以不同的SQL语句,呈现了相同的结果,这是因为被Mysql优化了。mysql在处理指令时,会对1=1这类无效的条件进行优化处理。这个与Java的编译器有些像,很多无效的判断或语句,在编译成字节码时,编译器会进行优化处理。

where 1=1的改进

虽然说1=1会被优化器优化掉,但优化操作本身还是会消耗MySQL的性能的,如果能够从根本上避免这种情况的出现,那不就更好了。

mybatis为例,在使用where 1=1时,通常会是如下写法:

<select id="queryUser" parameterType="com.choupangxia.entity.User" resultType="java.lang.Integer">
  select count(id) from t_user u where 1=1
<if test="username !=null and username !='' ">
  AND u.username = #{username} 
</if> 
<if test="userNo !=null and userNo !='' ">
  AND u.user_no = #{userNo}
</if> 
</select>

这里where 1=1的作用同上。但如果你更进一步去了解Mybatis的语法及标签,可以使用<where>标签来代替where 1=1

<select id="queryUser" parameterType="com.choupangxia.entity.User" resultType="java.lang.Integer">
  select count(id) from t_user u
<where>
<if test="username !=null and username !='' ">
 u.username = #{username} 
</if>
<if test="userNo !=null and userNo !='' ">
 AND u.user_no = #{userNo}
</if>
</where>
</select>

这样,在查询数据比较大的情况下,可减少MySQL为了优化1=1这样的条件而损失的性能。

小结

本文我们从习以为常的where 1=1使用聊起,聊了它的使用场景、MySQL对其优化、以及延伸出来的where 1<>1的使用,同时基于常见的Mybatis框架,如何进一步改进。

其实,写这篇文章想传达的一个思想就是:再小,再习以为常的事物,如果你去思考、研究都会学到很多相关的知识点,也都可以对其进一步优化。

到此这篇关于MySQL中where 1=1方法的使用及改进的文章就介绍到这了,更多相关 MySQL where 1=1 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中where 1=1方法的使用及改进

本文链接: https://www.lsjlt.com/news/149676.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL中where 1=1方法的使用及改进
    目录背景where 1=1的作用where 1<>1where 1=1的性能问题where 1=1的改进小结背景 刚入行的同学,看...
    99+
    2024-04-02
  • MySQL中where 1=1方法怎么使用
    这篇文章主要介绍了MySQL中where 1=1方法怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中where 1=1方法怎么使用文章都会有所收获,下面...
    99+
    2023-06-30
  • SQL中“where 1=1”的用法
    这篇文章给大家分享的是有关SQL中“where 1=1”的用法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SQL中where 1=1的用处解释:其实,1=1...
    99+
    2024-04-02
  • mysql中为什么要用where 1=1
    这篇文章将为大家详细讲解有关mysql中为什么要用where 1=1,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。where 1=1; 这个条件始终为...
    99+
    2024-04-02
  • MySQL 中的“where 1=1”语句是什么?
    在 MySQL 中,“Where 1=1”会生成表中的所有行,因为该语句始终为真。一个 为了更好地理解该语句,给出的示例如下 -首先,在 create 命令的帮助下创建一个表。给出如下 -mysql> CREATE tabl...
    99+
    2023-10-22
  • MyBatis中不建议使用where 1=1原因详解
    目录前言错误的改造方式正确的改进方式不传任何参数的请求传递 1 个参数的请求传递 2 个参数的请求用法解析总结前言 最近接手了一个老项目,“愉悦的心情”自然无...
    99+
    2024-04-02
  • sql语句中where 1=1的作用是什么
    sql语句中where 1=1的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 在看程序...
    99+
    2024-04-02
  • MyBatis中不建议使用where 1=1的原因是什么
    这篇文章主要介绍了MyBatis中不建议使用where 1=1的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MyBatis中不建议使用where 1=1的原因...
    99+
    2023-07-02
  • 详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
    [m : ] 代表列表中的第m+1项到最后一项 [ : n] 代表列表中的第一项到第n项 [-1] 代表去到最后一项 [:-1]代表除了最后一个都获取到 [::-...
    99+
    2024-04-02
  • mysql中where的用法
    where 子句用于过滤 mysql 数据结果,通过指定条件选择满足特定标准的行。条件可以包含比较运算符、逻辑运算符、通配符、常量和变量。示例:- 根据年龄过滤:selec&#...
    99+
    2024-04-29
    mysql
  • Laravel中where的高级使用方法
    这篇文章主要介绍了Laravel中where的高级使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。有时候项目中需要进行多个字段搜索就可以用到此方法在Larav...
    99+
    2023-06-08
  • Python中的shape[0]、shape[1]和shape[-1]使用方法
    目录.shape的使用方法shape[0]的使用方法shape[1]的使用方法python中shape[0]与shape[1]shape函数是Numpy中的函数,它的功能是读取矩阵的...
    99+
    2023-08-08
    Python shape使用 Python shape[1]使用 Python shape[0]
  • thinkphp的where()方法怎么使用
    这篇文章主要讲解了“thinkphp的where()方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkphp的where()方法怎么使用”吧!wher&...
    99+
    2023-06-22
  • 怎么在Laravel中使用where方法
    这期内容当中小编将会给大家带来有关怎么在Laravel中使用where方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Laravel中的可以同时使用多个where,所以我们可以每个...
    99+
    2023-06-14
  • mysql中limit 1的使用方法是什么
    在MySQL中,使用LIMIT 1可以限制返回的结果集中的行数为1行。这在需要仅返回结果集中的第一行时非常有用。LIMIT 1通常与...
    99+
    2024-04-09
    mysql
  • Linux whereis命令的使用方法
    这篇文章的内容主要围绕Linux常用命令whereis命令的使用方法进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!Linux常用命令whe...
    99+
    2023-06-28
  • linux下whereis命令的使用方法
    本篇内容介绍了“linux下whereis命令的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!linux/Unix可以使用...
    99+
    2023-06-13
  • Mysql中where与on的区别及何时使用详析
    之前在写连表查询的时候,老是分不清楚where和on的区别,导致有时写的SQL会出现一点小的问题,这里专门写篇文章做下记录,如果你也分不清,那么请参考 二者的区别及什么时候...
    99+
    2024-04-02
  • MySQL where条件is null 及is not null 的用法
    首先先了解is null 与 is not null 分别代表什么;is null 在查询中用于查询指定字段为null的数据、is not null 在查询中用于查询指定字段中不为null的数据(手动删除的无法查询); 语法为 selec...
    99+
    2023-09-25
    mysql Powered by 金山文档
  • mysql中的where关键字如何使用
    这篇文章给大家分享的是有关mysql中的where关键字如何使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在mysql中,wher&#...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作