需求:批量插入上萬條數據,要求created_at(創建時間)為依次遞增的數據,其他字段不做限制
實現上述需求,可以通過文件的形式或者創建存儲過程的方式實現,小編今天就以寫一個簡單的存儲過程來實現該需求:
步驟一:表結構,如下:

步驟二:編寫存儲過程:
1)檢查庫中函數下是否已存在同名的存儲過程,如果存在,則需要執行刪除存儲過程的操作

| -- 如果需要存儲過程已存在,則可以先執行刪除存儲過程操作 DROP PROCEDURE IF EXISTS `proc_auto_insertdata2`; |
2)新建一個查詢,運行創建存儲過程的腳本:
| CREATE PROCEDURE `proc_auto_insertdata2`( IN record INTEGER, -- record參數用來傳需要插入數據的條數 IN dt timestamp -- dt參數用來傳入時間戳,開始插入的第一條數據的時間(格式為:'2020-10-24 14:31:44') ) BEGIN DECLARE number INTEGER ; -- 聲明一個number,用來控制循環的次數 set number=1; -- 將number的值賦值為1,代表循環從1開始 START TRANSACTION; WHILE number <=record DO -- 使用while進行循環,滿足條件進入循環 select date_add(dt, interval 1 second) into dt;-- 使用date_add()函數將時間進行轉換為秒數,並賦值給dt參數 -- 插入數據 INSERT INTO school.auction_records -- 庫名.表名 -- 由於id是自動增長,不需要額外賦值,所以需要將剩余的其他字段全部列出進行一一對應賦值插入 (pool_id, auctionable_id, auctionable_type, auction_prize_id, prize_id, coin, status, created_at, updated_at) VALUES( 1, 2, 'participator', 13, 1, 2, 2, dt, dt); -- number參數進行自增 set number =number+1; -- dt參數進行自增 set dt = date_add(dt, interval 1 second); end WHILE; COMMIT; END |

創建成功之后,在庫的函數下進行刷新,則可以看到新建的存儲過程:

步驟三:調用存儲過程進行批量插入數據:
調用方法一:使用腳本
| call proc_auto_insertdata2(20,'2020-10-24 14:31:44') |
執行結果如下:

執行成功之后,查看表中的數據:

調用方法二:運行存儲過程
