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

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

高老师9年前 (2018-04-01)SQL2204

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

学习自韩顺平

(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);

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

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

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

分享给朋友:

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

mysql group分组排序

mysql group分组排序

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

mysql表视图管理语句

mysql表视图管理语句

1.查看所有表,包括视图表,show  tables;2.查看表结果,包括视图表,desc  表名3.查看建表过程,show   create   table  表名;4.查看建视图过程,show   create   view...

mysql常用函数

mysql常用函数

1.floor(x)返回小于x的整数,向下取整,用法,商品的价格是浮点型的,需要向下取整 eg:select id,title,floor(price)  from  shopgoods2.rand()返回0-1之间的随机数 select rand() select rand()...

mysql 取不重复数据,mysql 取消重复数据,mysql 重复记录取最新

mysql 取不重复数据,mysql 取消重复数据,mysql 重复记录取最新

已有表名log来记录用户日志,id是主键,uid是用户id,rmk是备注,addtime是时间戳,需要取出不重复的用户日志记录默认的结果集:id     uid      rmk ...

mysql 自定义排序,mysql 自定义字段排序,mysql 强制自定义排序

mysql 自定义排序,mysql 自定义字段排序,mysql 强制自定义排序

通常我们使用自定义排序的语法是:ORDER BY FIELD(`字段名称`, 值1, 值2, 值3),但是如果我想强制值1到值3永远在前面,这个语法是满足不了的.(1).基本的会员数据表:id      name  &n...

mysql变更字段值为另一张表的某个值

mysql变更字段值为另一张表的某个值

(1).下面是一张基本的会员表membermid      name    age 1 高峰 24 2 王小 19 3 韩星 24(2).下面是一张基本的会员日志表loglid  ...