1. 程式人生 > >Navicat 工具 構造過程,實現百萬資料新增

Navicat 工具 構造過程,實現百萬資料新增

什麼也不說了,直接上圖
第一步,建立一個函式,建立函式過程,實現隨機產生6位 字母,自己百度
這裡寫圖片描述
第二步,建立一個過程,新增百萬級的資料,其實原理很簡單,就是改變資料庫自動提交的方式,當自己把所有資料新增完後,一步提交
這裡寫圖片描述
第三步,就是執行,我這裡定義了引數,沒有去掉,可以在引數的位置直接刪除
執行結果這裡寫圖片描述
到此400w資料新增完成!

另外,還有在cmd中執行的命令,大家可以試試,貼上程式碼

建立表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 ;

建立表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 ;

工資級別表

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;

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

隨機產生字串

定義一個新的命令結束符合

delimiter $$

刪除自定的函式

drop function rand_string $$

這裡我建立了一個函式.

rand_string(n INT) rand_string 是函式名 (n INT) //該函式接收一個整數

create function rand_string(n INT)
returns varchar(255) #該函式會返回一個字串
begin

chars_str定義一個變數 chars_str,型別是 varchar(100),預設值’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 $$

delimiter ;
select rand_string(6);

隨機產生部門編號

delimiter

dropfunctionrandnum

這裡我們又自定了一個函式

create function rand_num( )
returns int(5)
begin
declare i int default 0;
set i = floor(10+rand()*500);
return i;
end $$

delimiter ;
select rand_num();

********************************

向emp表中插入記錄(海量的資料)

delimiter

dropprocedureinsertemp

隨即新增僱員[游標] 400w

create procedure insert_emp(in start int(10),in max_num int(10))
begin
declare i int default 0;

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

delimiter ;

呼叫剛剛寫好的函式, 1800000條記錄,從100001號開始

call insert_emp(100001,4000000);

****************************************************

向dept表中插入記錄

delimiter

dropprocedureinsertdept

create procedure insert_dept(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;
repeat
set i = i + 1;
insert into dept values ((start+i) ,rand_string(10),rand_string(8));
until i = max_num
end repeat;
commit;
end $$

delimiter ;
call insert_dept(100,10);

————————————————

向salgrade 表插入資料

delimiter

dropprocedureinsertsalgrade
create procedure insert_salgrade(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;
ALTER TABLE emp DISABLE KEYS;
repeat
set i = i + 1;
insert into salgrade values ((start+i) ,(start+i),(start+i));
until i = max_num
end repeat;
commit;
end $$
delimiter ;

測試不需要了

call insert_salgrade(10000,1000000);

———————————————-