Mysql
MySQL批量更新表
我想批量更新我的 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
和“記住你離開的地方”。我在這裡詳細說明。(這是針對刪除的,但很容易適應更新。)