1. 程式人生 > 其它 >Mysql快速插入千萬條資料的實戰教程---轉

Mysql快速插入千萬條資料的實戰教程---轉

一.建立資料庫二.建立表1.建立dept表CREATETABLE`dept`(`id`int(11)NOTNULL,`deptno`mediumint(9)DEFAULTNUL...

一.建立資料庫

二.建立表

1.建立 dept表

  1. CREATE TABLE`dept`(
  2. `id`int(11)NOT NULL,
  3. `deptno`mediumint(9)DEFAULT NULL,
  4. `dname`varchar(20)DEFAULT NULL,
  5. `loc`varchar(13)DEFAULT NULL,
  6. PRIMARY KEY(`id`)
  7. )ENGINE=InnoDBDEFAULT CHARSET=utf8;

2.建立emp表

  1. CREATE TABLE`emp`(
  2. `id`int(11)NOT NULL,
  3. `empon`mediumint(9)DEFAULT NULL COMMENT'編號',
  4. `ename`varchar(20)DEFAULT NULL,
  5. `job`varchar(9)DEFAULT NULL,
  6. `mgr`mediumint(9)DEFAULT NULL COMMENT'上級編號',
  7. `hirdate`datetime DEFAULT NULL COMMENT'入職時間',
  8. `sal`decimal(7,2)DEFAULT NULL COMMENT'薪水',
  9. `comm`decimal(7,2)DEFAULT NULL COMMENT'紅利',
  10. `deptno`mediumint(9)DEFAULT NULL COMMENT'部門編號',
  11. PRIMARY KEY(`id`)
  12. )ENGINE=InnoDBDEFAULT CHARSET=utf8;

三.設定引數

SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

預設關閉. 需要設定為1。因為表中設定 mediumint 欄位 建立函式可能會報錯

SET GLOBAL log_bin_trust_function_creators=1;

四.建立函式

1.隨機產生字串

  1. DELIMITER $
  2. CREATE FUNCTION RAND_STR(n INT)RETURNS VARCHAR(255)
  3. BEGIN
  4. DECLARE chars_str VARCHAR(100)DEFAULT'abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  5. DECLARE return_str VARCHAR(255)DEFAULT'';
  6. DECLARE i INT DEFAULT0;
  7. WHILE i<n DO
  8. SET return_str=CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
  9. SET i=i+1;
  10. ENDWHILE;
  11. RETURN return_str;
  12. END$

2.隨機產生部門編號

  1. DELIMITER $
  2. CREATE FUNCTION RAND_num()RETURNS INT(5)
  3. BEGIN
  4. DECLARE i INT DEFAULT0;
  5. SET i=FLOOR(100+RAND()*10);
  6. RETURN i;
  7. END$

五.建立儲存過程

1. emp表儲存過程

  1. DELIMITER $
  2. CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
  3. BEGIN
  4. DECLARE i INT DEFAULT0;
  5. SET autocommit=0;
  6. REPEAT#重複
  7. SET i=i+1;
  8. INSERT INTO emp(empon,ename,job,mgr,hirdate,sal,comm,deptno)VALUES((START+i),RAND_STR(6),'SALESMAN',0001,CURDATE(),2000,400,RAND_num());
  9. UNTIL i=max_num
  10. ENDREPEAT;
  11. COMMIT;
  12. END$

2.dept表儲存過程

  1. DELIMITER $
  2. CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
  3. BEGIN
  4. DECLARE i INT DEFAULT0;
  5. SET autocommit=0;
  6. REPEAT#重複
  7. SET i=i+1;
  8. INSERT INTO dept(deptno,dname,loc)VALUES((START+i),RAND_STR(10),RAND_STR(8));
  9. UNTIL i=max_num
  10. ENDREPEAT;
  11. COMMIT;
  12. END $

六.執行

1.先執行十條

這個錯誤是一個小坑 發現了嗎 我之前留下的 根據提示 去排查吧

執行成功!

2.檢視資料

重頭戲來嘍! 一次性幹他百萬條資料 賭一把 看看會不會玩崩了

3.執行百萬插入

CALL insert_dept(10001,1000000);

需要給 給個表設定成可以成主鍵自增