MySQL通过函数存储过程批量插入数据
更新时间:2022年01月20日 10:33:10 作者:靖节先生
这篇文章主要给大家介绍了关于MySQL通过函数存储过程批量插入数据,以及MySQL通过函数批量插入数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
数据库 mysql批量插入数据函数存储过程
-- 1 批量插入数据 -- 1.1 创建表 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 设置参数 -- 在执行创建函数之前, 首先请保证 log_bin_trust_function_creators 参数为 1, 即 on 开启状态。 -- 否则会报错: -- 查询: 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 编写随机函数 -- 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 $$ -- 如果要删除函数, 则执行: 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$$ -- 如果要删除函数: drop function rand_num; -- 1.4 创建存储过程 -- 1.4.1 创建往 emp 表中插入数据的存储过程 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 创建往 dept 表中插入数据的存储过程 #执行存储过程, 往 dept 表添加随机数据 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 添加数据到部门表 #执行存储过程, 往 dept 表添加 1 万条数据 DELIMITER ; CALL insert_dept(100); -- 1.5.2 添加数据到员工表 #执行存储过程, 往 emp 表添加 50 万条数据 DELIMITER ; CALL insert_emp(1000,5000);
附:MySQL通过函数批量插入数据
右键新建过程,选择完成。编写函数,运行即可。
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通过函数存储过程批量插入数据的文章就介绍到这了,更多相关MySQL批量插入数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
MySQL 中的count(*) 与 count(1) 谁更快一些?
这篇文章主要讨论MySQL 中 count(*) 与 count(1) 谁更快一些?以下讨论基于 InnoDB 存储引擎,并且再文末单独说一下MyISAM ,感兴趣的小伙伴可以参考一下2022-02-02Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作方法
Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设,这篇文章主要给大家介绍了关于Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作的相关资料,需要的朋友可以参考下2023-11-11linux 之centos7搭建mysql5.7.29的详细过程
这篇文章主要介绍了linux 之centos7搭建mysql5.7.29的详细过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-05-05MySQL报错ERROR 2002 (HY000): Canot connect to local MyS
ERROR 2002是一个常见的错误,这可能会阻碍数据库的正常使用,本文就来介绍一下该错误的解决方法,具有一定的参考价值,感兴趣的可以了解一下2024-07-07mysql处理添加外键时提示error 150 问题的解决方法
当你试图在mysql中创建一个外键的时候,这个出错会经常发生,这是非常令人沮丧的2011-11-11
最新评论