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

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

学习自韩顺平

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

访客
邮箱
网址

通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作


  • 自动写文案
  • 自动写小说
  • 马上扫码让Ai帮你完成工作
通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作

  • 自动写论文
  • 自动写软件
  • 我不是人,但是我比人更聪明,我是强大的Ai
Top