MySQL通过函数存储过程批量插入数据
吾爱主题
阅读:180
2024-04-01 23:22:19
评论:0
数据库 mysql批量插入数据函数存储过程
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | -- 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通过函数批量插入数据
右键新建过程,选择完成。编写函数,运行即可。
?1 2 3 4 5 6 7 8 9 10 | 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批量插入数据内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/m0_37583655/article/details/111088956
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。