據(jù))
原文網(wǎng)址MySQL--批量插入一百萬條數(shù)據(jù)-CSDN博客簡介本文介紹向MySQL批量插入一百萬條數(shù)據(jù)的方法。表結(jié)構(gòu)CREATE TABLE t_goods ( id bigint NOT NULL COMMENT 主鍵, name varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 商品名字, description varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 商品描述, unit_price decimal(10,2) DEFAULT NULL COMMENT 商品單價, stock_quantity int DEFAULT NULL COMMENT 庫存數(shù)量, create_time datetime NOT NULL COMMENT 創(chuàng)建時間, update_time datetime NOT NULL COMMENT 修改時間, create_id varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 創(chuàng)建人ID, create_name varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 創(chuàng)建人名字, update_id varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 修改人ID, update_name varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 修改人名字, delete_flag bigint NOT NULL DEFAULT 0 COMMENT 刪除標(biāo)記。0未刪除其他已刪除, PRIMARY KEY (id) USING BTREE ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin COMMENT商品管理;法1存儲過程# 選定數(shù)據(jù)庫 use qingzhou; # 刪除原有存儲過程 DROP PROCEDURE if EXISTS BatchInsert; # 聲明存儲過程的結(jié)束符號為$$ delimiter $$ # 創(chuàng)建存儲過程。參數(shù)0起始id參數(shù)1循環(huán)次數(shù) CREATE PROCEDURE BatchInsert(IN initId INT, IN loopCount INT) BEGIN DECLARE tmpI INT; DECLARE tmpId INT; SET tmpI 0; SET tmpId initId; # 關(guān)閉自動提交事務(wù)提高插入效率 set autocommit0; WHILE tmpI loopCount DO INSERT INTO qingzhou.t_goods(id, name, description, unit_price, stock_quantity, create_time, update_time, create_id, create_name, update_id, update_name, delete_flag) VALUES (tmpId, (CONCAT(鼠標(biāo), tmpId)), 藍(lán)牙鼠標(biāo), 10.00, 200, 2024-07-12 08:55:10, 2024-07-12 08:55:46, NULL, NULL, NULL, NULL, 0); SET tmpId tmpId 1; SET tmpI tmpI 1; END WHILE; COMMIT; END$$; # 結(jié)束符恢復(fù)為默認(rèn)的分號 delimiter ; -- 界定符復(fù)原為默認(rèn)的分號 # 調(diào)用存儲過程 CALL BatchInsert(1, 1000000); # 刪除存儲過程 DROP PROCEDURE if EXISTS BatchInsert;我用的Windows本機(jī)的MySQL用Navicat執(zhí)行此存儲過程用了79秒。執(zhí)行時右下角的“查詢時間”一直在增加直到結(jié)束才停止。法2用代碼用MyBatis-Plus的saveBatch。它內(nèi)部會進(jìn)行拆分每1000條數(shù)據(jù)插入一次