MySQL批量插入数据脚本

1、建表

部门表

1 CREATE TABLE dept(
2 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
3 deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
4 dname VARCHAR(20) NOT NULL DEFAULT "",
5 loc VARCHAR(13) NOT NULL DEFAULT ""
6 )ENGINE INNODB CHARSET utf8;

员工表

复制代码
 1 CREATE TABLE emp(
 2 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 3 empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*编号*/
 4 ename VARCHAR(20) NOT NULL DEFAULT "",/*名字*/
 5 job VARCHAR(9) NOT NULL DEFAULT "", /*工作*/
 6 mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*上级编号*/
 7 hiredate DATE NOT NULL, /*入职时间*/
 8 sal DECIMAL(7,2) NOT NULL, /*薪水*/
 9 comm DECIMAL(7,2) NOT NULL, /*红利*/
10 deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
11 )ENGINE INNODB CHARSET utf8;
复制代码

2、设置参数 log_bin_trust_function_creators

设置前

 设置后

3、创建函数

创建随机获取字符串的函数

复制代码
 1 DELIMITER $$
 2 CREATE FUNCTION rand_str(n INT) RETURNS VARCHAR(255)
 3 BEGIN
 4  DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 5  DECLARE return_str VARCHAR(255) DEFAULT '';
 6  DECLARE i INT DEFAULT 0;
 7  WHILE i < n DO
 8   SET return_str = CONCAT(return_str, SUBSTRING(chars_str, FLOOR(1 + RAND() * 52), 1));
 9   SET i = i + 1;
10  END WHILE;
11  RETURN return_str;
12 END $$
复制代码

创建随机获取数字的函数

1 DELIMITER $$
2 CREATE FUNCTION rand_num() RETURNS INT(5)
3 BEGIN
4  DECLARE i INT DEFAULT 0;
5  SET i = FLOOR(100 + RAND() * 10);
6  RETURN i;
7 END $$

4、创建存储过程

创建往emp表中插入数据的存储过程

复制代码
 1 DELIMITER $$
 2 CREATE PROCEDURE insert_emp(IN START INT(10), IN max_num INT(10))
 3 BEGIN
 4  DECLARE i INT DEFAULT 0;
 5  #set autocommit = 0 把autocommit 设置为0
 6  SET autocommit = 0;
 7  REPEAT
 8  SET i = i + 1;
 9  INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES ((START + i), rand_str(6), 'SALESMAN', 0001, CURDATE(), 2000, 400, rand_num());
10  UNTIL i = max_num
11  END REPEAT;
12  COMMIT;
13 END $$
复制代码

创建往dept表中插入数据的存储过程

复制代码
 1 DELIMITER $$
 2 CREATE PROCEDURE insert_dept(IN START INT(10), IN max_num INT(10))
 3 BEGIN
 4  DECLARE i INT DEFAULT 0;
 5  #set autocommit = 0 把autocommit 设置为0
 6  SET autocommit = 0;
 7  REPEAT
 8  SET i = i + 1;
 9  INSERT INTO dept (deptno, dname, loc) VALUES ((START + i), rand_str(10), rand_str(8));
10  UNTIL i = max_num
11  END REPEAT;
12  COMMIT;
13 END $$
复制代码

5、调用存储过程

SQL命令格式:

call 存储过程名(参数列表)

插入之后的效果

 

posted @   没有你哪有我  阅读(333)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示