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
這裡我們又自定了一個函式
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
隨即新增僱員[游標] 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
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
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 ;