深入理解where 1=1的用處
where 1=1有什么用?在SQL語言中,寫這么一句話就跟沒寫一樣。
select * from table1 where 1=1與select * from table1完全沒有區(qū)別,甚至還有其他許多寫法,1<>2,'a'='a','a'<>'b',其目的就只有一個(gè),where 的條件為永真,得到的結(jié)果就是未加約束條件的。
在SQL注入時(shí)會用到這個(gè),例如select * from table1 where name='lala'給強(qiáng)行加上select * from table1 where name='lala' or 1=1這就又變成了無約束的查詢了。
最近發(fā)現(xiàn)的妙用在于,在不定數(shù)量查詢條件情況下,1=1可以很方便的規(guī)范語句。例如一個(gè)查詢可能有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呢,那么在每一個(gè)不為空的查詢條件面前,都必須判斷有沒有where字句,否則要在第一個(gè)出現(xiàn)的地方加where
where 1=1的寫法是為了檢化程序中對條件的檢測
打個(gè)比方有三個(gè)參數(shù)a, b, c
@sql=select * from tb'
這三個(gè)參數(shù)都可能為空
這時(shí)你要構(gòu)造語句的話,一個(gè)個(gè)檢測再寫語句就麻煩
比如
if @a is not null
@sql=@sql + " where a=' + @a
if @b is not null
這里你怎么寫?要不要加where 或直接用 and ?,你這里還要對@a是否為空進(jìn)行檢測
用上 where 1=1 之后,就不存在這樣的問題, 條件是 and 就直接and ,是or就直接接 or
拷貝表
create table_name as select * from Source_table where 1=1;
復(fù)制表結(jié)構(gòu)
create table_name as select * from Source_table where 1 <> 1;
相關(guān)文章
MySQL的鎖機(jī)制之全局鎖和表鎖的實(shí)現(xiàn)
本文主要介紹了MySQL的鎖機(jī)制之全局鎖和表鎖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01MySQL單表多關(guān)鍵字模糊查詢的實(shí)現(xiàn)方法
MySQL單表多關(guān)鍵字模糊查詢實(shí)現(xiàn)方法是很多人都非常想知道的一個(gè)問題,那么,究竟采用什么方法,才能實(shí)現(xiàn)MySQL單表多關(guān)鍵字模糊查詢呢?2011-03-03mybatis+mysql 使用存儲過程生成流水號的實(shí)現(xiàn)代碼
這篇文章主要介紹了mybatis+mysql 使用存儲過程生成流水號的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-01-01Windows server 2008 r2上安裝MySQL5.7.10步驟
這篇文章主要介紹了Windows server 2008 r2上安裝MySQL5.7.10的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01詳解MySQL實(shí)現(xiàn)主從復(fù)制過程
這篇文章主要為大家詳細(xì)介紹了MySQL主從復(fù)制的實(shí)現(xiàn)過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07MYSQL使用inner join 進(jìn)行 查詢/刪除/修改示例
本文為大家介紹下使用inner join 進(jìn)行查詢/刪除/修改,具體實(shí)現(xiàn)如下,學(xué)習(xí)mysql的朋也可以學(xué)習(xí)下,希望對大家有所幫助2013-07-07Mysql row number()排序函數(shù)的用法和注意
這篇文章主要介紹了Mysql row number()排序函數(shù)的用法和注意 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07mysql啟動(dòng)時(shí)出現(xiàn)ERROR 2003 (HY000)問題的解決方法
這篇文章主要為大家詳細(xì)介紹了mysql啟動(dòng)時(shí)出現(xiàn)ERROR 2003 (HY000問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Mysql查詢語句如何實(shí)現(xiàn)無限層次父子關(guān)系查詢
這篇文章主要介紹了Mysql查詢語句如何實(shí)現(xiàn)無限層次父子關(guān)系查詢問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07