程序员在编程过程中,经常会在代码中使用到“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;

更多SQL相关技术内容,请关注公号:SQL数据库开发

::在sql语句中是什么写法_不懂就问:SQL 语句中 where 条件后 写上1=1 是什么意思...相关推荐

  1. SQL语句:where条件后写上1=1是为了什么

    SQL语句:where条件后写上1=1是为了什么 String sql="select * from table_name where 1=1"; if( conditon 1) ...

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

    这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的.例如: String sql="select * from table_name ...

  3. SQL 语句中 where 条件后 写上 1=1 是什么意思!

    这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的.例如: String sql="select * from table_name ...

  4. MYSQL中where条件后写上1=1 是什么意思?

    我们在实际的开发项目中经常会出现条件语句,但有些条件不是必须要传的而是可选的.就比如项目中出现模糊搜索,那么此时在mysql就会出现判断是否传值.来.直接看代码: 例如 String sql=&quo ...

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

    前言 where 1=1是sql语句条件逻辑判断表达式,由于1=1成立,恒为真,该表达式1=1将始终返回"真".这种写法实际目的是为了获取逻辑值"True",其 ...

  6. xml中else if写法_面试官:优化代码中大量的if/else,你有什么方案?

    一个快速迭代的项目,时间久了之后,代码中可能会充斥着大量的if/else,嵌套6.7层,一个函数几百行,简!直!看!死!人! 这个无限循环嵌套,只是总循环的一部分...我已经绕晕在黄桷湾立交 仔细数了 ...

  7. 口袋中有红黄蓝白黑5种颜色的球若干个。每次从口袋中任意取出三个球,问得到3中不通过颜色的球的可能取法。(枚举、gcc编译)

    1.题目 口袋中有红黄蓝白黑5种颜色的球若干个.每次从口袋中任意取出三个球,问得到3中不通过颜色的球的可能取法.(枚举) 2.代码 #include <stdio.h>void main( ...

  8. 口袋中有红黄蓝白黑5种颜色的球若干个。每次从口袋中任意取出三个球,问得到3中不通过颜色的球的可能取法。(枚举)

    // 121212 第七章例7.7.cpp : 定义控制台应用程序的入口点. // /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. ...

  9. python中的import语句的作用是什么_什么是Python import语句?在Python中的import语句作用有哪些?...

    Python import语句是用来导入模块的,在python模块库中有着大量的模块可供使用,import语句作用是把文件需要用的指定模块导入到当前程序中. import语句的作用 import语句作 ...

最新文章

  1. Linux 网络 tcp C/S通信模型
  2. tab 页形式展现多张报表
  3. 在HANA里设置后台Job
  4. ICE专题:实现简单的聊天室(一)
  5. 理解包装类 Integer 的底层实现,教你破解所有面试难题!
  6. 中国移动锁定数据业务新战略
  7. [Prescan] Prescan与Simulink联合
  8. QT6安装教程(兼容QT5、QT4)
  9. 九针串口定义(公口、母口图解)
  10. 板簧的弹性系数如何计算_滑板式钢板弹簧悬架变刚度计算方法的研究
  11. 东北大学金工实习工程实训习题
  12. SCAU 1038 打印图案
  13. matlab如何求反渐开线函数,inv函数(inv函数查询表)
  14. 将用户需求转成产品需求
  15. Raft 实现日志复制同步
  16. Win10家庭版 无法远程桌面连接的解决方案
  17. 构造器(也称构造方法)
  18. 神马开户推广点击量和消费增加了很多是否有异常?
  19. 日常所用的耳机接口定义
  20. 全球及中国弹性运动胶带行业发展展望及投资趋势预测报告2022-2027年

热门文章

  1. php yii多表查询
  2. 会员按天统计、日分时统计
  3. win2003服务器 虚拟主机安全配置
  4. (转)解读NTFS(一)
  5. c语言的报告一,C语言实验报告(一).doc
  6. python有类似mybatis的框架_为什么感觉国内比较流行的 mybatis 在国外好像没人用的样子?...
  7. 8086简单的指令流水线_在8086微处理器中执行流水线的指令和概念的步骤
  8. phpmyadmin管理mysql_用phpMyAdmin管理MySQL数据库_MySQL
  9. linux rsa登录改密码登录_LINUX中RSA认证登录SSH(不需要输入密码登录)2种方法
  10. 2G的完整形式是什么?