萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql批量刪除數據sql語句詳解

mysql批量刪除數據sql語句詳解

mysql批量刪除數據可以使用很多技巧來實現,我相信很多朋友知道的不是很多,這裡我們來給大家介紹一下常用的批量刪除記錄的sql語法吧,希望例子能給大家帶來幫助哦。

1.like與 in批量刪除指定記錄

like語法

like主要是用來模糊查詢了

sql = "delete from A where field like '%ABC%'" 這個可用於字符與數字

in 語法

sql = "delete from A where field id(1,2,3)"  這個只能用在數字

關聯刪除

delete B from B
where exists (select 1 from A where B.accountid=A.accountid);

上面兩條方法如果刪除100W級別的數據庫估計是沒什麼問題,如果是1000W估計就不行了

假設有一個表(syslogs)有1000萬條記錄,需要在業務不停止的情況下刪除其中statusid=1的所有記錄,差不多有600萬條, 直接執行 DELETE FROM syslogs WHERE statusid=1

會發現刪除失敗,因為lock wait timeout exceed的錯誤。
 
因為這條語句所涉及的記錄數太多,因此我們通過LIMIT參數分批刪除,比如每10000條進行一次刪除,那麼我們可以利用 MySQL這樣的語句來完成
 

 代碼如下 復制代碼 DELETE FROM syslogs WHERE status=1 ORDER BY statusid LIMIT 10000;

然後分多次執行就可以把這些記錄成功刪除。

另一種 刪除方向。

上面通過比較覺的需要刪除的量不是太大時,把需要刪除的PID生到到另一個臨時表中。

 代碼如下 復制代碼

mysql DBname -e "select a.pid from table1 a ,table2 b where a.pid=b.pid">del_pid.txt;

sed -i '1d' del_pid.txt
awk '{print "delete from table1 where pid=",$1,";"}' del_pid.txt >del_pid.sql
mysql DBname<del_pid.sql

這樣把SQL拆成多個SQL執行速度應該不會太慢了。

copyright © 萬盛學電腦網 all rights reserved