1、建库见表语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE DATABASE bigData;

USE bigData;

CREATE TABLE dept(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
dname VARCHAR(20) NOT NULL DEFAULT '',
loc VARCHAR(13) NOT NULL DEFAULT ''
) ENGINE=INNODB DEFAULT CHARSET=GBK;

CREATE TABLE emp(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '部门编号',
ename VARCHAR(20) NOT NULL DEFAULT '' COMMENT '名字',
job VARCHAR(9) NOT NULL DEFAULT '' COMMENT '工作',
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '上级编号',
hiredate DATE NOT NULL COMMENT '入职时间',
sal DECIMAL(7,2) NOT NULL COMMENT '薪水',
comm DECIMAL(7,2) NOT NULL COMMENT '红利',
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '部门编号'
) ENGINE=INNODB DEFAULT CHARSET=G

2、创建函数

如果报错:this function has none of DETERMINISTIC….
可能由于开启过慢查询日志,因为我们开启了bin-log,我们就必须为我们的function指定一个参数:

1
2
show variables like 'log_bin_trust_function_creators'
set global log_bin_trust_function_creators=1

这样添加了参数以后,如果mysqld重启,上述参数又会消失,永久方法:
windows下my.ini文件的[mysqld]加上log_bin_trust_function_creators=1
linux下/etc/my.cnf文件的[mysqld]加上log_bin_trust_function_creators=1

2.1、创建生成固定长度的字符串函数

1
2
3
4
5
6
7
8
9
10
11
12
DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN
 DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 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 $$

2.2、创建随机生成编号的函数

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

3、创建存储过程

3.1、创建员工表存储过程

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

3.2、创建部门表存储过程

1
2
3
4
5
6
7
8
9
10
11
12
DELIMITER $$
CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
SET autocommit=0;
REPEAT
SET i=i+1;
INSERT INTO dept(deptno,dname,loc) VALUES((START+i),rand_string(10),rand_string(8));
UNTIL i=max_num
END REPEAT;
COMMIT;
END $$

最后更新: 2019年07月03日 09:52

原始链接: https://www.sunnymaple.cn/2019/07/03/批量插入数据脚本/

× 请我吃糖~
打赏二维码