1. 程式人生 > >MySql使用指令碼批量插入資料用於測試

MySql使用指令碼批量插入資料用於測試

步驟如下

1. 建表 
2. 設定log_bin_trust_function_creators 
3. 建立函式 
4. 建立儲存過程 
5. 呼叫儲存過程

mysql批量資料指令碼

  • 1 建表

    create table dept(
      id int unsigned primary key auto_increment,
      deptno mediumint unsigned not null default 0,
      dname varchar(20) not null default "",
      loc varchar(13) not null default ""
    )engine=innodb default charset=gbk;
    create table emp(
      id int unsigned primary key auto_increment,
      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=innodb default charset=gbk;
  • 2 設定引數

    show variables like 'log_bin_trust_function_creators';
    set global log_bin_trust_function_creators=1;
  • 3 建立函式

     a.隨機產生字串
     delimiter $$
     create function rand_string(n int) returns varchar(255)
     begin
       declare chars_str varchar(100) default 'qwertyuiopasdfghjklzxcvbnm';
       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 $$
     b.隨機產生部門編號
     delimiter $$
     create function rand_num() returns int(5)
     begin
       declare i int default 0;
       set i=floor(100+rand()*10);
     return i;
     end $$
  • 4 建立儲存過程

    a.建立往emp表中插入資料的儲存過程
    delimiter $$
    create procedure insert_emp(in start int(10),in max_num int(10))
    begin
     declare i int default 0;
     /*把autocommit設定成0*/
     set autocommit= 0;
     repeat
     set i=i+1;
     insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
     values((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());
     until i=max_num end repeat;
    commit;
    end $$
    b.建立往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(deptno,dname,loc) values((start+i),rand_string(10),rand_string(8));
     until i=max_num end repeat;
     commit;
     end $$
  • 5 呼叫儲存過程

    call insert_dept(100,10);//從deptno為100起插入10條隨機生成資料
    call insert_emp(100001,5000000);//從empno為100001起插入5000000條隨機生成資料

我自己根據這個寫了如下的插入指令碼

建的表如下:

create table test_source
(
id varchar(20) primary key,
source_name varchar(50),
source_type varchar(50),
create_time datetime default current_timestamp,
update_time datetime default null on update current_timestamp
);
delimiter $$/*設定結束符*/
create function rand_string(n int) returns varchar(255)/*建立函式指定返回變數*/
begin
  declare chars varchar(100) default 'qwertyuiopasdfghjklzxcvbnm';
  declare return_str varchar(255) default '';
  declare i int default 0;/*聲明瞭三個變數*/
  while i<n do/*迴圈語句產生隨機的字串*/
  set return_str=concat(return_str,substring(chars,floor(1+rand()*26),1));
  set i=i+1;
  end while;
  return return_str;
end $$


delimiter $$
create procedure insert_test_source(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 test_source(id,source_name,source_type) values(start+i,rand_string(5),rand_string(5));
  until i=max_num end repeat;/*結束repeat*/
  commit;
end $$


delimiter ;/*設定結束符為;*/

call insert_test_source(1,500);/*呼叫*/