mysql 脚本批量_Mysql之批量数据脚本

# 新建库

create database bigData;

use bigData;

#1建表dept

CREATE TABLE dept(

id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT0,

dname VARCHAR(20) NOT NULL DEFAULT "",

loc VARCHAR(13) NOT NULL DEFAULT "") ENGINE=INNODB DEFAULT CHARSET=GBK ;

#2建表emp

CREATE TABLE emp

(

id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

empno MEDIUMINT UNSIGNED NOT NULL DEFAULT0, /*编号*/ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT0,/*上级编号*/hiredate DATE NOT NULL,/*入职时间*/sal DECIMAL(7,2) NOT NULL,/*薪水*/comm DECIMAL(7,2) NOT NULL,/*红利*/deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT0 /*部门编号*/)ENGINE=INNODB DEFAULT CHARSET=GBK ;

设置参数log_bin_trust_function_creator

为什么要设置这个参数?

当开启二进制日志后(可以执行show variables like 'log_bin'查看是否开启),

如果变量log_bin_trust_function_creators为OFF,那么创建或修改存储函数就会报

“ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL,

or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)”这样的错误

【解决方法】

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下my.cnf[mysqld]加上log_bin_trust_function_creators=1

创建函数,保证每条数据都不同(注意这里是写死的101-110)

#用于随机产生部门编号

DELIMITER $$

CREATE FUNCTION rand_num( )

RETURNS INT(5)

BEGIN

DECLARE i INT DEFAULT0;

SET i= FLOOR(100+RAND()*10);

RETURN i;

END $$

#假如要删除

#drop function rand_num;

创建存储过程

#执行存储过程,往dept表添加随机数据

DELIMITER $$

CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))

BEGIN

DECLARE i INT DEFAULT0;

SET autocommit= 0;

SET @SURNAME= '王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林罗郑梁谢宋唐位许韩冯邓曹彭曾萧田董潘袁于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟谭陆汪范金石廖贾夏韦傅方白邹孟熊秦邱江尹薛阎段雷侯龙史陶黎贺顾毛郝龚邵万钱严覃武戴莫孔向汤';

REPEAT

SET i= i + 1;

INSERT INTO dept (deptno ,dname,loc ) VALUES ((START+i) ,substr(@surname,floor(rand()*length(@surname)/3+1),10),substr(@surname,floor(rand()*length(@surname)/3+1),8));

UNTIL i=max_num

END REPEAT;

COMMIT;

END $$

#删除

# DELIMITER ;

# drop PROCEDURE insert_dept;

--插入员工函数

DELIMITER $$

CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))

BEGIN

DECLARE i INT DEFAULT0;

#set autocommit =0把autocommit设置成0

SET autocommit= 0;

SET @SURNAME= '王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林罗郑梁谢宋唐位许韩冯邓曹彭曾萧田董潘袁于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟谭陆汪范金石廖贾夏韦傅方白邹孟熊秦邱江尹薛阎段雷侯龙史陶黎贺顾毛郝龚邵万钱严覃武戴莫孔向汤';

REPEAT

SET i= i + 1;

INSERT INTO emp (empno, ename ,job ,mgr ,hiredate ,sal ,comm ,deptno ) VALUES ((START+i) ,substr(@surname,floor(rand()*length(@surname)/3+1),6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());

UNTIL i=max_num

END REPEAT;

COMMIT;

END $$

#删除

# DELIMITER ;

# drop PROCEDURE insert_emp;

往表里插入10个部门

DELIMITER ;

CALL insert_dept(100,10);

往员工表里插入50w个人数

DELIMITER ;

CALL insert_emp(100001,500000);

完结!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值