为什么我们在MySQL中提到WHERE 1 = 0?

条件1 = 0可用于阻止查询返回任何行。它返回空集。

语法如下:

SELECT * FROM yourTableName WHERE 1=0;

为了理解以上语法,让我们创建一个表。创建表的查询如下:

mysql> create table ConditionDemo
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> Name varchar(10),
   -> PRIMARY KEY(Id)
   -> );

使用insert命令在表中插入一些记录。查询如下:

mysql> insert into ConditionDemo(Name) values('Larry');
mysql> insert into ConditionDemo(Name) values('Sam');
mysql> insert into ConditionDemo(Name) values('Mike');
mysql> insert into ConditionDemo(Name) values('Carol');
mysql> insert into ConditionDemo(Name) values('John');
mysql> insert into ConditionDemo(Name) values('Bob');

使用select语句显示表中的所有记录。查询如下:

mysql> select * from ConditionDemo;

以下是输出:

+----+-------+
| Id | Name  |
+----+-------+
|  1 | Larry |
|  2 | Sam   |
|  3 | Mike  |
|  4 | Carol |
|  5 | John  |
|  6 | Bob   |
+----+-------+
6 rows in set (0.00 sec)

这是查询,以防止查询返回任何行

mysql> select *from ConditionDemo where 1=0;
Empty set (0.00 sec)

196d4619e372aa5c2875687ced2d0460.jpeg

  • where 1=1始终为true,在构造动态sql语句时,能够保证查询语句恒正确。

  • where 1=0; 这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表。

动态sql语句的一些问题

string MySqlStr="select * from table where";

if(Age.Text.Lenght>0)
{
   MySqlStr=MySqlStr+“Age="+"'Age.Text'";
}

if(Address.Text.Lenght>0)
{
   MySqlStr=MySqlStr+"and Address="+"'Address.Text'";
}

如果两个if语句均不成立,那么MySqlStr动态构造语句就变成了:

MySqlStr=”select * from table where”

这是一条错误的语句,不能被执行,会报错,这并不是一种好的编码方式,不够棒。

使用where 1=1语句后

string MySqlStr="select * from table where 1=1";

if(Age.Text.Lenght>0)
{
   MySqlStr=MySqlStr+“and Age="+"'Age.Text'";
}

if(Address.Text.Lenght>0)
{
  MySqlStr=MySqlStr+"and Address="+"'Address.Text'";
}

若两个if不成立,MySqlStr语句就变成了:

MySqlStr="select from table where 1=1;

该语句语法正确,它的作用相当于:MySqlStr=”select * from table;,被执行后,返回表中所有数据。意思就是,用户在多条件查询时,不输入任何条件,就会返回表中所有数据。

where 0=1 和 where 1=0  语句; 

这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表

该select语句主要用于读取表的结构而不考虑表中的数据,这样节省了内存,因为可以不用保存结果集。

SELECT * FROM strName WHERE 1 = 0;

创建一个新表,而新表的结构与查询的表的结构是一样的。

create table newtable as select * from oldtable where 1=0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值