在MySQL中,1=1 通常用作一种编程技巧,特别是在构建动态SQL查询时。它的用法及其优点包括以下几个方面
方便SQL的拼接
String sql = "select * from sys_user where 1=1";
if(条件){
 sql = sql + "and name = 'xiaofei'"
}
1=1 是可以避免 where 关键字后面的第一个词直接就是 and 而导致语法错误
拷贝表带数据
create table 新的表名 select * from 需要拷贝的表名 where 1=1
拷贝表不带数据
create table 新的表名 select * from 需要拷贝的表名 where 1<>1
# 下面的SQL也是可以的
create table 新的表名 select * from 需要拷贝的表名 where 1=2
性能问题
explain select * from sys_user where name = 'xiaofei';
explain select * from sys_user where 1=1 and name = 'xiaofei';
 
换句话来说,1=1 这样的条件对索引和性能没有影响。通过观察 explain 结果,我们可以发现两者之间没有本质区别。这种不同的 SQL 语句呈现出相同结果的现象,是因为 MySQL 对其进行了优化。当 MySQL 处理指令时,它会对 1=1 这类无效条件进行优化处理。这与 Java 编译器的工作原理相似,它们会在编译成字节码的过程中对许多无效判断或语句进行优化。
尽管1=1的条件会被优化器优化,但优化过程本身仍然会对MySQL的性能产生一定影响。因此,从根源上避免这种情况的发生。
Mybatis为例,可以使用 where 标签来代替 1=1
<select id="findUsers" resultType="User">
    SELECT * FROM users
   <where>
        <if test="name != null and name != ''">
            AND name = #{name}
        </if>
    </where>
</select>
                        打赏   
                    
                     
                 
                
                
                 
                         
                         
                        
 
    

当前共有 0 条评论