Mysql

MySQL批量更新表

  • June 15, 2019

我想批量更新我的 MySQL 表。

該表有 10000000+ 條記錄,所以我想更新前 1000 行,一旦完成,然後將 1001 更新為 2000 行。我需要把它做成一個循環。

我每天都使用此表格刪除過時的數據,但對於更新它也可以:

UPDATE過程範例採用:

DELIMITER $$

CREATE DEFINER = `root`@`localhost` PROCEDURE `geo_opt_2017`.`udp_batch_update`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER

BEGIN

SET @event_id = 1;

WHILE EXISTS (SELECT event_id FROM geo_opt_2017.event WHERE event_id > @event_id AND event_id <= @event_id + 1000) DO

   UPDATE geo_opt_2017.event SET event_lat_int = event_lat_int * 1 WHERE event_id > @event_id AND event_id <= @event_id + 1000 ;

   SET @event_id = @event_id + 1000;

END WHILE;


END $$
DELIMITER ;

SET 部分 - 是虛擬的,僅用於說明,您需要將其替換為真正的過程邏輯

該邏輯適用於許多數字或日期 - 簡單地按數字或日期時間間隔遞增。

對於 PK - 從不同列組合而沒有任何可見邏輯的表,例如電信表 -(前綴、上下文、優先級),它也是可能的,但稍微複雜一些。

不要使用OFFSET. 最好的方法是使用PRIMARY KEY和“記住你離開的地方”。我在這裡詳細說明。(這是針對刪除的,但很容易適應更新。)

引用自:https://dba.stackexchange.com/questions/174103