成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不懂就問(wèn):SQL 語(yǔ)句中 Where 條件后 寫(xiě)上1=1 是什么意思

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
程序員在編程過(guò)程中,經(jīng)常會(huì)在代碼中使用到“where 1=1”,這是為什么呢?

[[350698]]

程序員在編程過(guò)程中,經(jīng)常會(huì)在代碼中使用到“where 1=1”,這是為什么呢?

SQL注入

初次看到這種寫(xiě)法的同學(xué)肯定很納悶,加不加where 1=1,查詢不都一樣嗎?例如:

  1. select * from customers; 
  2. 與 
  3. select * from customers where 1=1; 

查詢出來(lái)的結(jié)果完全沒(méi)有區(qū)別呀。

是的,上面的查詢結(jié)果是沒(méi)有區(qū)別,但是這并不是我們要添加它的目的。我們知道1=1表示true,即永真,在SQL注入時(shí)配合or運(yùn)算符會(huì)得到意向不到的結(jié)果。

例如,當(dāng)我們要?jiǎng)h除客戶名稱為“張三”的記錄,我們可以這樣寫(xiě):

  1. delete from customers where name='張三' 

這個(gè)時(shí)候如果在where語(yǔ)句后面加上 or 1=1會(huì)是什么后果?

即:

  1. delete from customers where name='張三' or 1=1 

本來(lái)只要?jiǎng)h除張三的記錄,結(jié)果因?yàn)樘砑恿薿r 1=1的永真條件,會(huì)導(dǎo)致整張表里的記錄都被刪除了。

當(dāng)然這種事我們可千萬(wàn)不能干,也不能讓別人有機(jī)可乘,這里只是為了表述where 1=1的作用之一。

語(yǔ)法規(guī)范

我們?cè)趯?xiě)代碼的過(guò)程中,為了保證語(yǔ)法規(guī)范的時(shí)候,也會(huì)使用到where 1=1。

我們先看下面這段Java代碼:

  1. String sql="select * from table_name where 1=1"
  2. if( condition 1) { 
  3.   sql=sql+"  and  var2=value2"
  4. if(condition 2) { 
  5.   sql=sql+"  and var3=value3"

如果我們不寫(xiě)1=1的話,當(dāng)condition 1為真時(shí),代碼拼接后被執(zhí)行的SQL代碼如下:

  1. select * from table_name where and var2=value2; 

很明顯,這里會(huì)出現(xiàn)一個(gè)SQL 的語(yǔ)法錯(cuò)誤:and必須前后都有條件。

有人說(shuō)我直接把where寫(xiě)在if語(yǔ)句里面,我就不寫(xiě)where 1=1。

  1. String sql="select * from table_name"
  2. if( condition 1) { 
  3.   sql=sql+" where var2=value2 "
  4. if(condition 2) { 
  5.   sql=sql+" where var3=value3"

當(dāng)condition 1為真,condition 2為假時(shí),上面被執(zhí)行的SQL代碼為:

  1. select * from table_name where var2=value2; 

這個(gè)確實(shí)沒(méi)有語(yǔ)法錯(cuò)誤,但是當(dāng)condition 1和condition 2都為真呢?那么SQL語(yǔ)句就變成了這樣:

  1. select * from table_name  
  2. where var2=value2  
  3. where var3=value3; 

很明顯這是不符合SQL語(yǔ)法規(guī)范的。

這里寫(xiě)上where 1=1 是為了避免where 關(guān)鍵字后面的第一個(gè)詞直接就是 “and”而導(dǎo)致語(yǔ)法錯(cuò)誤,加上1=1后,不管后面有沒(méi)有and條件都不會(huì)造成語(yǔ)法錯(cuò)誤了。

拷貝表

在我們進(jìn)行數(shù)據(jù)備份時(shí),也經(jīng)常使用到where 1=1,當(dāng)然其實(shí)這兩可以不寫(xiě),寫(xiě)上之后如果想過(guò)濾一些數(shù)據(jù)再備份會(huì)比較方便,直接在后面添加and條件即可。

  1. create table  table_name 
  2. as    
  3. select * from  Source_table 
  4. where   1=1; 

復(fù)制表結(jié)構(gòu)

有1=1就會(huì)有1<>1或1=2之類的永假的條件,這個(gè)在拷貝表的時(shí)候,加上where 1<>1,意思就是沒(méi)有任何一條記錄符合條件,這樣我們就可以只拷貝表結(jié)構(gòu),不拷貝數(shù)據(jù)了。

  1. create table  table_name 
  2. as    
  3. select  * from    
  4. Source_table where   1 <> 1; 

1=1的壞處

我們?cè)趯?xiě)SQL時(shí),加上了1=1后雖然可以保證語(yǔ)法不會(huì)出錯(cuò)!

  1. select * from table where 1=1 

但是因?yàn)閠able中根本就沒(méi)有名稱為1的字段,該SQL其實(shí)等效于select * from table,這個(gè)SQL語(yǔ)句很明顯是全表掃描,需要大量的IO操作,數(shù)據(jù)量越大越慢。

所以在查詢時(shí),where1=1的后面需要增加其它條件,并且給這些條件建立適當(dāng)?shù)乃饕示蜁?huì)大大提高。

原文鏈接:https://mp.weixin.qq.com/s/OCTSdCbbCnrXOHA9YtvHBw

 

責(zé)任編輯:武曉燕 來(lái)源: SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)
相關(guān)推薦

2020-11-05 09:33:37

SQL數(shù)據(jù)庫(kù)編程

2022-11-05 08:37:00

MySQL數(shù)據(jù)索引

2021-09-16 06:44:07

數(shù)據(jù)庫(kù)SQL語(yǔ)句

2010-09-08 15:51:53

SQL語(yǔ)句where

2011-03-10 13:18:54

SQLwhere

2021-05-29 06:23:47

webpack esbuild

2021-05-27 20:56:51

esbuild 工具JavaScript

2021-10-09 07:10:32

Shell腳本linux

2024-10-05 00:00:10

SQL語(yǔ)句指定連接條

2020-10-14 07:50:57

DNS劫持

2024-05-27 00:02:00

UpdateWhere索引

2021-11-15 06:56:45

MyBatis開(kāi)發(fā)項(xiàng)目

2018-10-08 15:42:37

VoLTE4G流量語(yǔ)音

2010-09-26 10:29:45

JVMJava虛擬機(jī)

2021-01-21 21:24:34

DevOps開(kāi)發(fā)工具

2010-09-09 09:23:42

CSSDIV

2010-08-25 10:28:05

margin

2010-09-03 15:47:40

SQL語(yǔ)句鎖定

2010-09-03 14:39:15

SQLSELECT語(yǔ)句

2010-09-03 14:47:50

SQLSELECT語(yǔ)句
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久久久久久久久久久久av | 精品www| 国产精品美女久久久久久久久久久 | 国产一区二区 | 日韩欧美精品在线 | 久久久久综合 | 欧美三级在线 | 精久久久 | 中文字幕日本一区二区 | 中文字幕视频一区 | 精品一区二区三区免费视频 | 黄一区二区三区 | 精品欧美一区二区三区久久久 | 中文字幕第一页在线 | 啪啪av | 日本一区二区不卡 | 日韩精品区| 久久亚洲国产 | 天堂一区二区三区 | 国产精品视频一二三区 | 欧美xxxx日本| 国产偷自视频区视频 | 亚洲一区二区在线免费观看 | 性福视频在线观看 | 插插插干干干 | www.99热这里只有精品 | 午夜精品一区二区三区三上悠亚 | 欧洲精品久久久久毛片完整版 | 日韩一区二区三区在线播放 | 男人影音 | 91看片视频 | 国产又爽又黄的视频 | 久综合 | 激情欧美一区二区三区 | 久久av网站| 欧美性生活一区二区三区 | 日本国产欧美 | 国产精品日韩欧美一区二区三区 | 成人精品毛片国产亚洲av十九禁 | 国产精品一区二区视频 | 国产精品久久久久久一区二区三区 |