您当前的位置: 首页 >  sql

止步前行

暂无认证

  • 2浏览

    0关注

    247博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MySQL模拟插入百万级数据和SQL分析

止步前行 发布时间:2019-01-09 20:41:00 ,浏览量:2

一、引言

测试环境中的数据,有时候需要我们自己来构造,为了模拟大数据量,我们总不能一条一条SQL的往数据库中插入,我们可以使用函数和存储过程来实现,这就需要对MySQL的函数和存储过程所有掌握,下面就来介绍一下如何模拟百万数据或者千万数据的插入。(数据模拟完成后,还可以用这些数据来测试MySQL的访问性能哦)

二、MySQL模拟插入百万级数据: 1、建表部门表和员工表
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 ""
);
create table emp(
	id int unsigned primary key auto_increment,
	empno mediumint unsigned not null default 0,
	ename varchar(20) not null default "",
	job varchar(9) not null default "",
	mgr mediumint unsigned not null default 0,
	hiredate date not null,
	sal decimal(7,2) not null,
	comn decimal(7,2) not null,
	deptno mediumint unsigned not null default 0
);
2、设置参数 log_bin_trust_function_creators;

前提说明:如果我们在创建函数时,报错:this function has none of deterministic…,这是由于开启过慢查询日志,因为开启了bin-log(二进制日志),我们就必须为我们的function指定一个参数。

简单介绍一下,当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限,如果变量设置为1,MySQL不会对创建存储函数实施这些限制。

那么为什么MySQL有这样的限制呢? 因为二进制日志的一个重要功能是用于主从复制,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,参数log_bin_trust_function_creators就会生效,限制存储函数的创建、修改、调用。

(1)、查看该参数:

show varibales like ‘log_bin_trust_function_creators’;

(2)、设置该参数:

set global log_bin_trust_function_creators = 1;

(3)、这样添加了参数后,如果mysqld重启,上述参数又会消失,永久的办法是:

a.	在Windows系统下的配置文件中 my.ini[mysqld] 加上 log_bin_trust_function_creators = 1;
b.	在Linux下 /etc/my.cnf下my.cnf[mysqld] 加上 log_bin_trust_function_creators = 1;
3、创建函数,保证每条数据都不同 (1)、随机产生字符串
DELIMITER $$ 
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN
	DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmlopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
	DECLARE return_str VARCHAR(255) DEFAULT '';
	DECLARE i INT DEFAULT 0;
	WHILE i             
关注
打赏
1657848381
查看更多评论
0.7773s