MySQL通過函數(shù)存儲(chǔ)過程批量插入數(shù)據(jù)
數(shù)據(jù)庫 mysql批量插入數(shù)據(jù)函數(shù)存儲(chǔ)過程
-- 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è)置參數(shù) -- 在執(zhí)行創(chuàng)建函數(shù)之前, 首先請(qǐng)保證 log_bin_trust_function_creators 參數(shù)為 1, 即 on 開啟狀態(tài)。 -- 否則會(huì)報(bào)錯(cuò): -- 查詢: show variables like 'log_bin_trust_function_creators'; -- 設(shè)置: set global log_bin_trust_function_creators=1; -- 當(dāng)然, 如上設(shè)置只存在于當(dāng)前操作, 想要永久生效, 需要寫入到配置文件中: -- 在[mysqld]中加上 log_bin_trust_function_creators=1 -- 1.3 編寫隨機(jī)函數(shù) -- 1.3.1 隨機(jī)產(chǎn)生字符串 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 $$ -- 如果要?jiǎng)h除函數(shù), 則執(zhí)行: drop function rand_string; -- 1.3.2 隨機(jī)產(chǎn)生部門編號(hào) #用于隨機(jī)產(chǎn)生多少到多少的編號(hào) 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$$ -- 如果要?jiǎng)h除函數(shù): drop function rand_num; -- 1.4 創(chuàng)建存儲(chǔ)過程 -- 1.4.1 創(chuàng)建往 emp 表中插入數(shù)據(jù)的存儲(chǔ)過程 DELIMITER $$ CREATE PROCEDURE insert_emp( START INT , max_num INT ) BEGIN DECLARE i INT DEFAULT 0; #set autocommit =0 把 autocommit 設(shè)置成 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ù)的存儲(chǔ)過程 #執(zhí)行存儲(chǔ)過程, 往 dept 表添加隨機(jī)數(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 調(diào)用存儲(chǔ)過程 -- 1.5.1 添加數(shù)據(jù)到部門表 #執(zhí)行存儲(chǔ)過程, 往 dept 表添加 1 萬條數(shù)據(jù) DELIMITER ; CALL insert_dept(100); -- 1.5.2 添加數(shù)據(jù)到員工表 #執(zhí)行存儲(chǔ)過程, 往 emp 表添加 50 萬條數(shù)據(jù) DELIMITER ; CALL insert_emp(1000,5000);
附:MySQL通過函數(shù)批量插入數(shù)據(jù)
右鍵新建過程,選擇完成。編寫函數(shù),運(yùn)行即可。
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
總結(jié)
到此這篇關(guān)于MySQL通過函數(shù)存儲(chǔ)過程批量插入數(shù)據(jù)的文章就介紹到這了,更多相關(guān)MySQL批量插入數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL?中的count(*)?與?count(1)?誰更快一些?
這篇文章主要討論MySQL?中?count(*)?與?count(1)?誰更快一些?以下討論基于?InnoDB?存儲(chǔ)引擎,并且再文末單獨(dú)說一下MyISAM?,感興趣的小伙伴可以參考一下2022-02-02Navicat中新建MySQL數(shù)據(jù)庫與新建、修改、刪除數(shù)據(jù)表及刪除數(shù)據(jù)庫詳細(xì)操作方法
Navicat是一套快速、可靠并價(jià)格相當(dāng)便宜的數(shù)據(jù)庫管理工具,專為簡(jiǎn)化數(shù)據(jù)庫的管理及降低系統(tǒng)管理成本而設(shè),這篇文章主要給大家介紹了關(guān)于Navicat中新建MySQL數(shù)據(jù)庫與新建、修改、刪除數(shù)據(jù)表及刪除數(shù)據(jù)庫詳細(xì)操作的相關(guān)資料,需要的朋友可以參考下2023-11-11linux 之centos7搭建mysql5.7.29的詳細(xì)過程
這篇文章主要介紹了linux 之centos7搭建mysql5.7.29的詳細(xì)過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Mysql數(shù)據(jù)庫設(shè)計(jì)三范式實(shí)例解析
這篇文章主要介紹了Mysql數(shù)據(jù)庫設(shè)計(jì)三范式實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04MySQL報(bào)錯(cuò)ERROR?2002?(HY000):?Canot?connect?to?local?MyS
ERROR?2002是一個(gè)常見的錯(cuò)誤,這可能會(huì)阻礙數(shù)據(jù)庫的正常使用,本文就來介紹一下該錯(cuò)誤的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07Mysql存儲(chǔ)過程循環(huán)內(nèi)嵌套使用游標(biāo)示例代碼
本節(jié)主要介紹了Mysql存儲(chǔ)過程循環(huán)內(nèi)如何嵌套使用游標(biāo),詳細(xì)實(shí)現(xiàn)如下,需要的朋友不要錯(cuò)過2014-08-08mysql處理添加外鍵時(shí)提示error 150 問題的解決方法
當(dāng)你試圖在mysql中創(chuàng)建一個(gè)外鍵的時(shí)候,這個(gè)出錯(cuò)會(huì)經(jīng)常發(fā)生,這是非常令人沮喪的2011-11-11