MySQL聯合多表更新和刪除

2021-07-03 18:13:05 字數 3125 閱讀 4269

多表更新

在 mysql 3.23 中,你可以使用 limit # 來確保只有給定的記錄行數目被更改。 

如果乙個 order by 子句被使用(從 mysql 4.0.0 開始支援),記錄行將以指定的次序被更新。這實際上只有連同 limit 一起才有用。 

從 mysql 4.0.4 開始,你也可以執行乙個包含多個表的 update 的操作: 

update items,month set items.price=month.price

where items.id=month.id;

注意:多表 update 不可以使用 order by 或 limit。 

多表刪除

第乙個多表刪除格式從 mysql 4.0.0 開始被支援。第二個多表刪除格式從 mysql 4.0.2 開始被支援。 

僅僅在 from 或 using 子句 之前 列出的表中的匹配記錄行被刪除。效果就是,你要以從多個表中同時刪

除記錄行,並且同樣可以有其它的表用於檢索。 

在表名後的 .* 僅僅是為了相容 access: 

delete t1,t2 from t1,t2,t3 where t1.id=t2.id and t2.id=t3.idor

delete from t1,t2 using t1,t2,t3 where t1.id=t2.id and t2.id=t3.id

在上面的情況下,我們僅僅從 t1 和 t2 表中刪除匹配的記錄行。 

如果乙個 order by 子句被使用(從 mysql 4.0.0 開始支援), 記錄行將以指定的次序刪除。這實際上只有連同 limit 一起才有用。示例如下: 

delete from somelog

where user = 'jcole'

order by timestamp

limit 1

這將刪除匹配 where 子句的,並且最早被插入(通過 timestamp 來確定)的記錄行。 

delete 語句的limit rows 選項是 mysql 特有的,它告訴伺服器在控制權被返回到客戶端之前可被刪除的最大記

錄行數目。這可以用來確保乙個特定的 delete 命令不會占用太長的時間。你可以簡單地重複使用 delete 命令,直到被影響的記錄行數目小於 limit 值。 

從 mysql 4.0 開始,在 delete 語句中可以指定多個表,用以從乙個表中刪除依賴於多表中的特殊情況

的記錄行。然而,在乙個多表刪除中,不能使用 order by 或 limit。

假設有兩個表,tab1,tab2,分別有產品名稱和產品**,現在我想用tab2的**替換tab1的**,我寫的語句是update tab1 set tab1.產品**=tab2.產品** where tab1.產品名稱=tab2.產品名稱 

結果出現錯誤,提示為:列字首 'tab2' 與查詢中所用的表名或別名不匹配。請問應該怎樣寫,

sql語句是不支援多表同時更新的。 

應該這樣寫 

update tab1 set tab1.產品** = (select tab2.產品** from tab2 where tab2.產品名稱 = tab1.產品名稱) where tabl1.產品名稱 in (select tab2.產品名稱 from tab2) 

後面的where tab1.產品名稱 in (select tab2.產品名稱 from tab2) 這句保證了如果tab1的產品在tab2沒有記錄時不會出錯。

在 開發中,資料庫來回換,而有些關鍵性的語法又各不相同,這是一件讓開發人員很頭痛的事情.本文總結了update語句更新多表時在sql server,oracle,mysql三種資料庫中的用法.我也試了sqlite資料庫,都沒成功,不知是不支援多表更新還是咋的. 

在本例中: 

我們要用表gdqlpj中的gqdltks,bztks欄位資料去更新landleveldata中的同欄位名的資料,條件是當landleveldata 中的geo_code字段值與gdqlpj中的lxqdm字段值相等時進行更新. 

sql server語法: 

update   

set   

| @variable = expression 

| @variable = column = expression } [ ,...n ] 

[ ,...n ] ] 

[ where 

< search_condition > ] }  | 

[ where current of 

| cursor_variable_name } 

] } 

[ option ( < query_hint > [ ,...n ] ) ] 

sql server示例: 

update a 

set a.gqdltks=b.gqdltks,a.bztks=b.bztks 

from landleveldata a,gdqlpj b 

where a.geo_code=b.lxqdm 

oracle語法: 

update    updatedtable 

set (col_name1[,col_name2...])= 

(select    col_name1,[,col_name2...]   

from    srctable [where where_definition]) 

oracel 示例: 

update landleveldata a 

set (a.gqdltks, a.bztks)= 

(select b.gqdltks, b.bztks    from gdqlpj b 

where a.geo_code=b.lxqdm) 

mysql語法: 

update table_references 

set col_name1=expr1 [, col_name2=expr2 ...] 

[where where_definition] 

mysql 示例: 

update landleveldata a, gdqlpj b 

set a.gqdltks= b.gqdltks, 

a.bztks= b.bztks 

where a.geo_code=b.lxqdm

Mysql也可以聯合多表更新和刪除

節選自mysql手冊 多表更新 在 mysql 3.23 中,你可以使用 limit 來確保只有給定的記錄行數目被更改。如果乙個 order by 子句被使用 從 mysql 4.0.0 開始支援 記錄行將以指定的次序被更新。這實際上只有連同 limit 一起才有用。從 mysql 4.0.4 開始...

MySQL更新和刪除

更新和刪除的操作sql語句比較簡單,不過要注意使用update的時候,要注意weher條件的限制,下面的語句是只更新id為10005的email位址,如果不加where語句限制,那麼將表中所有的email更新為 elmer fudd.com 刪除某個列的值,設定為null即可。刪除行的sql語句,使...

mysql批量更新 多表更新 多表刪除

mysql批量更新 多表更新 多表刪除 本節主要內容 mysql的批量更新 多表更新 多表刪除 一,批量更新 示例 update tepoi,pinf set tepoi.x pinf.fx,tepoi.y pinf.fy where tepoi.pid pinf.dmgis id and tepo...