MySQL通過函數(shù)存儲過程批量插入數(shù)據(jù)
更新時間:2022年01月20日 10:33:10 作者:靖節(jié)先生
這篇文章主要給大家介紹了關于MySQL通過函數(shù)存儲過程批量插入數(shù)據(jù),以及MySQL通過函數(shù)批量插入數(shù)據(jù)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
數(shù)據(jù)庫 mysql批量插入數(shù)據(jù)函數(shù)存儲過程
-- 1 批量插入數(shù)據(jù) -- 1.1 創(chuàng)建表 CREATE TABLE `dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAULT NULL, ceo INT NULL , PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; CREATE TABLE `emp` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `empno` INT NOT NULL , `name` VARCHAR(20) DEFAULT NULL, `age` INT(3) DEFAULT NULL, `deptId` INT(11) DEFAULT NULL, PRIMARY KEY (`id`) #CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; -- 1.2 設置參數(shù) -- 在執(zhí)行創(chuàng)建函數(shù)之前, 首先請保證 log_bin_trust_function_creators 參數(shù)為 1, 即 on 開啟狀態(tài)。 -- 否則會報錯: -- 查詢: show variables like 'log_bin_trust_function_creators'; -- 設置: set global log_bin_trust_function_creators=1; -- 當然, 如上設置只存在于當前操作, 想要永久生效, 需要寫入到配置文件中: -- 在[mysqld]中加上 log_bin_trust_function_creators=1 -- 1.3 編寫隨機函數(shù) -- 1.3.1 隨機產生字符串 DELIMITER $$ CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255) BEGIN DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'; DECLARE return_str VARCHAR(255) DEFAULT ''; DECLARE i INT DEFAULT 0; WHILE i < n DO SET return_str =CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1)); SET i = i + 1; END WHILE; RETURN return_str; END $$ -- 如果要刪除函數(shù), 則執(zhí)行: drop function rand_string; -- 1.3.2 隨機產生部門編號 #用于隨機產生多少到多少的編號 DELIMITER $$ CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11) BEGIN DECLARE i INT DEFAULT 0; SET i = FLOOR(from_num +RAND()*(to_num -from_num+1)) ; RETURN i; END$$ -- 如果要刪除函數(shù): drop function rand_num; -- 1.4 創(chuàng)建存儲過程 -- 1.4.1 創(chuàng)建往 emp 表中插入數(shù)據(jù)的存儲過程 DELIMITER $$ CREATE PROCEDURE insert_emp( START INT , max_num INT ) BEGIN DECLARE i INT DEFAULT 0; #set autocommit =0 把 autocommit 設置成 0 SET autocommit = 0; REPEAT SET i = i + 1; INSERT INTO emp (empno, NAME ,age ,deptid ) VALUES ((START+i) ,rand_string(6) , rand_num(30,50),rand_num(1,10000)); UNTIL i = max_num END REPEAT; COMMIT; END$$ #刪除 # DELIMITER ; # drop PROCEDURE insert_emp; -- 1.4.2 創(chuàng)建往 dept 表中插入數(shù)據(jù)的存儲過程 #執(zhí)行存儲過程, 往 dept 表添加隨機數(shù)據(jù) DELIMITER $$ CREATE PROCEDURE `insert_dept`( max_num INT ) BEGIN DECLARE i INT DEFAULT 0; SET autocommit = 0; REPEAT SET i = i + 1; INSERT INTO dept ( deptname,address,ceo ) VALUES (rand_string(8),rand_string(10),rand_num(1,500000)); UNTIL i = max_num END REPEAT; COMMIT; END$$ #刪除 # DELIMITER ; # drop PROCEDURE insert_dept; -- 1.5 調用存儲過程 -- 1.5.1 添加數(shù)據(jù)到部門表 #執(zhí)行存儲過程, 往 dept 表添加 1 萬條數(shù)據(jù) DELIMITER ; CALL insert_dept(100); -- 1.5.2 添加數(shù)據(jù)到員工表 #執(zhí)行存儲過程, 往 emp 表添加 50 萬條數(shù)據(jù) DELIMITER ; CALL insert_emp(1000,5000);
附:MySQL通過函數(shù)批量插入數(shù)據(jù)

右鍵新建過程,選擇完成。編寫函數(shù),運行即可。
CREATE DEFINER=`root`@`localhost` PROCEDURE `plInsertCom`()
BEGIN
#Routine body goes here...
DECLARE i int;
set i=0;
while i<10000 do
INSERT into commodity(name,price,type_id,count,`describe`) VALUES ('name2',1,1,1,'text');
set i=i+1;
END WHILE;
END
總結
到此這篇關于MySQL通過函數(shù)存儲過程批量插入數(shù)據(jù)的文章就介紹到這了,更多相關MySQL批量插入數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Dify訪問mysql數(shù)據(jù)庫詳細代碼示例
這篇文章主要介紹了使用Dify訪問mysql數(shù)據(jù)庫的相關資料,并詳細講解了如何在本地搭建數(shù)據(jù)庫訪問服務,使用ngrok暴露到公網(wǎng),并創(chuàng)建知識庫、數(shù)據(jù)庫訪問工作流和智能體,需要的朋友可以參考下2025-03-03
MySQL專用服務器自動配置參數(shù)的實現(xiàn)
本文主要介紹了MySQL專用服務器自動配置參數(shù)的實現(xiàn),MySQL8.0推出了專用數(shù)據(jù)庫服務器自動配置參數(shù),通過打開innodb_dedicated_server,下面就來詳細的介紹一下,感興趣的可以了解一下2024-09-09
解析MySQL數(shù)據(jù)庫性能優(yōu)化的六大技巧
本篇文章是對MySQL數(shù)據(jù)庫性能優(yōu)化的六大技巧進行了詳細的分析介紹,需要的朋友參考下2013-06-06

