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

2021-12-30 12:29:05 字數 1746 閱讀 8481

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

本節主要內容:

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

一,批量更新:

**示例:

update tepoi,pinf set tepoi.x=pinf.fx,tepoi.y=pinf.fy

where tepoi.pid=pinf.dmgis_id and tepoi.pid>10000;

假設有表a,b,其結構為:

**示例:

a(id,email,name) b(id,email)

update a inner join b on a.id=b.id set

update tablea inner join tableb on tablea.fielda=tableb.fieldb(update中使用inner join)

settablea.欄位=值,

tableb.欄位=值

二,多表更新

在 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.id

ordelete 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。  

mysql單錶更新及多表更新

歷經oracle,ms sql server,到現在的mysql,跨越了3種資料庫的學習與研究,現在對於mysql的表更新,單表字段更新與其他型別的rdbms資料庫一樣,多表級聯更新還是有些區別的,不過研究過後,發現還是蠻簡單的。update 語句用於中修改資料庫表中的資料。update 語句用於在...

sql update 多表更新

1.首先建立兩個表 sql語句如下 users 使用者表 create table users id bigint,departid bigint,name text depart 部門表 create table depart id bigint,departname text users表中的d...

多表關聯更新

用優惠表裡面的70006569的優惠的開始時間 來更新lik.temp yangmm 1115 discnt 的開始時間。這就出現問題了第乙個問題 同乙個使用者的70006569 優惠的開始時間可能有好幾個 取哪乙個?這就需要rank 函式來解決。第二個問題更新的時候會出現無法將null值插入.這個...