where 1=1有什麼用?
為什麼要在sql語句後邊加上where 1=1 ,對於初次見到的童鞋確實很納悶。
覺得select * from table1 where 1=1 與 select * from table1完全沒有區別。
其實這種想法是錯的。記住本落格爾的名言【存在則合理】~~~
不管sql語句中 where 1=1還是1<>2,'a'='a','a'<>'b',其目的就只有一個,where 的條件為永真,得到的結果就是未加約束條件的。
在SQL隱碼攻擊時會用到這個,
例如:DELETE FROMtable_a WHERE a= '落塵曦'
給強行加上 DELETE FROM table_a WHERE a= '落塵曦' or 1=1
本來是刪除a值為落塵曦的這一條資料,這就又變成了無約束的刪除了。
1=1 永真, 1<>1 永假。
例如一個模糊查詢可能有a, b, c, d 約束,也可能沒有,那該如何處理呢?
String sql = select * from table1 where 1=1 ; if(!a.equals("")){ sql=sql+"a='"+a+"'"; } if(!b.equals("")){ sql=sql+"b'"+b+"'"; } if(!c.equals("")){ sql=sql+"c='"+c+"'"; } if(!d.equals("")){ sql=sql+"d='"+d+"'";
為什麼要寫多餘的1=1?馬上就知道了。
where 1=1的寫法是為了檢化程式中對條件的檢
上述例子的四個引數都可能為空, 這時你要構造語句的話,一個個檢測再寫語句就麻煩
這裡你怎麼寫?要不要加where 或直接用 and ?,你這裡還要對引數是否為空進行檢測
用上 where 1=1 之後,就不存在這樣的問題, 條件是 and 就直接and ,是or就直接接 or
如果不寫1=1呢,那麼在每一個不為空的查詢條件面前,都必須判斷有沒有where字句。否則要在第一個出現的地方加where
還不理解?
1=1的用處 主要用來構件動態SQL
String sql = "select a,b from table_a where 1=1 "; if(!b.equals("")) sql += "and b='"+b+"'"; 當使用者選擇了b ( 假如b值為qwe ) 結果就是:String sql = ''select a,b from table_a where 1=1 and b= 'qwe';
但是當使用者沒有選擇b 那b就是一個空值
結果就是:String sql =''select a,b from table_a where 1=1''; ,執行也不會出錯,相當於沒有限制b這個條件。
但是如果沒有1=1的條件,則l String sql =''select a,b from table_a where'' ; 這樣就會報錯。
1<>1 的用處: 用於只取結構不取資料的場合
例如:
create table table_temp tablespace tbs_temp as select * from table_ori where 1<>1
建成一個與table_ori 結構相同的表table_temp,但是不要table_ori 裡的資料。(除了表結構,其它結構也同理)
除了1=1 或1<>1之外的其它永真永假的條件同理。
拷貝表
create table_name as select * from Source_table where 1=1;
複製表結構
create table_name as select * from Source_table where 1 <> 1;
參考:https://blog.csdn.net/qq_23994787/article/details/79045768
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2839656/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 為什麼要用where 1=1
- where 1=1 是什麼鬼?
- MySQL-where 1=1MySql
- Mybatis where 1=1 動態sql問題MyBatisSQL
- 第一次線上 OOM 事故,竟和 where 1 = 1 有關OOM
- mysql的having和where有什麼區別MySql
- 第1天 | 12天搞定Python,告訴你有什麼用?Python
- 高仿包1比1和原版皮有什麼區別
- 【轉】LINQ to SQL語句(1)之WhereSQL
- bind 127.0.0.1 ::1 和 bind 127.0.0.1 有什麼區別127.0.0.1
- 什麼是5G聚合路由器?QYT-X1s聚合路由器有什麼用?路由器
- 1 什麼是Zookeeper 能幹什麼
- CRM什麼意思?有什麼用?
- Docker(1)- 什麼是 DockerDocker
- (1)微服務是什麼?它的優缺點有哪些?微服務
- Cat-M1和NB-IoT有什麼區別?
- phpstrom用模型where查詢,欄位為什麼不會提示?PHP模型
- FactoryBean有什麼用Bean
- excel輸入1下拉為什麼全是1 excel下拉沒有填充序列選項Excel
- NLA有什麼用?原理是什麼?
- RDP是什麼意思?有什麼用?
- LDAP是什麼意思?有什麼用?LDA
- 什麼是高防?有什麼用?
- css--BFC是什麼,有什麼用,怎麼用?CSS
- python中while 1表示什麼PythonWhile
- Python是什麼意思?Python有什麼用?Python
- 根證書是什麼?有什麼用?
- 助記詞是什麼,有什麼用?
- defer有什麼用呢
- Python client有什麼用Pythonclient
- “1BTC=1BTC,1ETH≠1ETH”——風頭教父Tim Draper想說什麼?
- ">/dev/null 2>&1 "是什麼意思devNull
- 什麼是前奏設計 1/2
- 什麼是 T+1 資料?
- 1、Swing簡介:Swing是什麼?
- 走進Task(1):什麼是Task
- 什麼?1除以2等於0
- webgl入門(1)-什麼是webglWeb