Mysql快速插入千萬條資料的實戰教程---轉
阿新 • • 發佈:2022-03-01
一.建立資料庫二.建立表1.建立dept表CREATETABLE`dept`(`id`int(11)NOTNULL,`deptno`mediumint(9)DEFAULTNUL...
一.建立資料庫
二.建立表
1.建立 dept表
- CREATE TABLE`dept`(
- `id`int(11)NOT NULL,
- `deptno`mediumint(9)DEFAULT NULL,
- `dname`varchar(20)DEFAULT NULL,
- `loc`varchar(13)DEFAULT NULL,
- PRIMARY KEY(`id`)
- )ENGINE=InnoDBDEFAULT CHARSET=utf8;
2.建立emp表
- CREATE TABLE`emp`(
- `id`int(11)NOT NULL,
- `empon`mediumint(9)DEFAULT NULL COMMENT'編號',
- `ename`varchar(20)DEFAULT NULL,
- `job`varchar(9)DEFAULT NULL,
- `mgr`mediumint(9)DEFAULT NULL COMMENT'上級編號',
- `hirdate`datetime DEFAULT NULL COMMENT'入職時間',
- `sal`decimal(7,2)DEFAULT NULL COMMENT'薪水',
- `comm`decimal(7,2)DEFAULT NULL COMMENT'紅利',
- `deptno`mediumint(9)DEFAULT NULL COMMENT'部門編號',
- PRIMARY KEY(`id`)
- )ENGINE=InnoDBDEFAULT CHARSET=utf8;
三.設定引數
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
預設關閉. 需要設定為1。因為表中設定 mediumint 欄位 建立函式可能會報錯
SET GLOBAL log_bin_trust_function_creators=1;
四.建立函式
1.隨機產生字串
- DELIMITER $
- CREATE FUNCTION RAND_STR(n INT)RETURNS VARCHAR(255)
- BEGIN
- DECLARE chars_str VARCHAR(100)DEFAULT'abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- DECLARE return_str VARCHAR(255)DEFAULT'';
- DECLARE i INT DEFAULT0;
- WHILE i<n DO
- SET return_str=CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
- SET i=i+1;
- ENDWHILE;
- RETURN return_str;
- END$
2.隨機產生部門編號
- DELIMITER $
- CREATE FUNCTION RAND_num()RETURNS INT(5)
- BEGIN
- DECLARE i INT DEFAULT0;
- SET i=FLOOR(100+RAND()*10);
- RETURN i;
- END$
五.建立儲存過程
1. emp表儲存過程
- DELIMITER $
- CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
- BEGIN
- DECLARE i INT DEFAULT0;
- SET autocommit=0;
- REPEAT#重複
- SET i=i+1;
- INSERT INTO emp(empon,ename,job,mgr,hirdate,sal,comm,deptno)VALUES((START+i),RAND_STR(6),'SALESMAN',0001,CURDATE(),2000,400,RAND_num());
- UNTIL i=max_num
- ENDREPEAT;
- COMMIT;
- END$
2.dept表儲存過程
- DELIMITER $
- CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
- BEGIN
- DECLARE i INT DEFAULT0;
- SET autocommit=0;
- REPEAT#重複
- SET i=i+1;
- INSERT INTO dept(deptno,dname,loc)VALUES((START+i),RAND_STR(10),RAND_STR(8));
- UNTIL i=max_num
- ENDREPEAT;
- COMMIT;
- END $
六.執行
1.先執行十條
這個錯誤是一個小坑 發現了嗎 我之前留下的 根據提示 去排查吧
執行成功!
2.檢視資料
重頭戲來嘍! 一次性幹他百萬條資料 賭一把 看看會不會玩崩了
3.執行百萬插入
CALL insert_dept(10001,1000000);
需要給 給個表設定成可以成主鍵自增