当前位置:首页 > SQL > 正文内容

mysql构建海量表,mysql 海量数据创建

高老师7年前 (2018-04-01)SQL1937

海量表,数据量较大,并且每个字段的值具有唯一性。如果你创建的海量表只是数据多,索引是毫无意义的。构建海量时我们要使用存储过程。

学习自韩顺平

(1).创建一个测试数据库

create  database  testdb;

set names gbk;

use testdb

(2).创建dept部门表

CREATE TABLE dept (

deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,

dname VARCHAR (20) NOT NULL DEFAULT "",

loc VARCHAR (13) NOT NULL DEFAULT ""

) ENGINE = MyISAM DEFAULT CHARSET = utf8;

(3).创建emp雇员表

CREATE TABLE emp

(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,/*薪水*/

comm DECIMAL(7,2) NOT NULL,/*红利*/

deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/

)ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

(4).创建工资级别表

CREATE TABLE salgrade

(

grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,

losal DECIMAL (17, 2) NOT NULL,

hisal DECIMAL (17, 2) NOT NULL

) ENGINE = MyISAM DEFAULT CHARSET = utf8;

(5).工资级别表插入测试数据

INSERT INTO salgrade VALUES (1,700,1200);

INSERT INTO salgrade VALUES (2,1201,1400);

INSERT INTO salgrade VALUES (3,1401,2000);

INSERT INTO salgrade VALUES (4,2001,3000);

INSERT INTO salgrade VALUES (5,3001,9999);

(6).改变下命令结束符delimiter $$,此时结束符不是;

(7).创建一个函数,可以返回一个随机的字符串

create function rand_string(n INT)

returns varchar(255) #该函数会返回一个字符串

begin

#定义了一个变量 chars_str,类型 varchar(100)

#默认给 chars_str 初始值  'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ'

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 $$

(8).自定义一个函数,返回一个随机的部门号

create function rand_num( )

returns int(5)

begin

declare i int default 0;

set i = floor(10+rand()*500);

return i;

 end $$

(9).随机向添加雇员表 800w的函数,作为储存过程使用

create procedure insert_emp(in start int(10),in max_num int(10))

begin

declare i int default 0;

#set autocommit =0 把autocommit设置成0

#autocommit = 0 含义: 不要自动提交

set autocommit = 0;  

repeat

set i = i + 1;

insert into emp values ((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());

 until i = max_num

end repeat;

  commit;

end $$

call insert_emp(100001,8000000);

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:http://blog.20230611.cn/post/311.html

分享给朋友:

“mysql构建海量表,mysql 海量数据创建” 的相关文章

mysql group分组排序

mysql group分组排序

下面的是商品数据表,id是主键,catename是分类,titile是标题,price是价格,现在要求计算每种分类下的商品平均价格.id     catename       &n...

MySQL中的where和having的区别

MySQL中的where和having的区别

   where与having非常类似.都能筛选数据.表达式完全一致.    但是职责的确不同.where负责对表中的字段进行筛选,having负责对where筛选后的结果集再次筛选。这也就是where不能使用别名字段来筛选的原因,因为数据中没有这个字段。&n...

Mysql子句查询陷阱

Mysql子句查询陷阱

例如我们需要查询商品表中每个分类中商品id最大的记录,并且显示商品价格以下是表结构:id     catename         title &nb...

Mysql exists型子查询

Mysql exists型子查询

需求查询出存在商品的商品分类.    先看看分类表:id(分类的id)    catename(分类名) 1         手机 2 &n...

Left join,​Right join,​Inner join的区别实例讲解

Left join,​Right join,​Inner join的区别实例讲解

Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。Right join:即右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表...

mysql没有快捷方式,mysql快捷方式,mysql启动快捷方式

mysql没有快捷方式,mysql快捷方式,mysql启动快捷方式

有很多集成环境安装完成之后是没有快捷方式的,例如西部数码的网站管理助手4.0,、 更或者是护卫神PHP套件都是一样的。安装完成最多给你安装一个PhPmyadmin让你管理Mysql,但是对于经常使用命令行的我们来说是非常不方面的,而且还必须安装PhPmyadmin来管理。下面就让我们自己手...