Mysql創建存儲過程--批量插入數據


需求:批量插入上萬條數據,要求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')

執行結果如下:

 

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM