在MySQL数据库中,有时为了建立测试表格,需要向一张表中插入很多条数据,可以使用下面的存储过程实现:
首先建立一个测试表: mysql> create table t_1 (id serial,name char(5)) ; Query OK, 0 rows affected (0.26 sec)
然后建立一个存储过程: delimiter $$ SET AUTOCOMMIT = 0$$
create procedure test01() begin declare v_cnt decimal (10) default 0 ; dd:loop insert into t_1 values (null,'aaaaa'),(null,'aaaaa'),(null,'aaaaa'),(null,'aaaaa'),(null,'aaaaa'),(null,'aaaaa'),(null,'aaaaa'),(null,'aaaaa'),(null,'aaaaa'),(null,'aaaaa'); commit; set v_cnt = v_cnt+10 ; if v_cnt = 10000 then leave dd; end if; end loop dd ; end;$$
delimiter ;
调用存储过程向表格中插入数据: mysql> select count(*) from t_1; +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec)
mysql> mysql> mysql> call test01; Query OK, 0 rows affected (21.25 sec)
mysql> select count(*) from t_1; +----------+ | count(*) | +----------+ | 10000 | +----------+ 1 row in set (0.01 sec)
再次执行存储过程,会插入更多数据: mysql> call test01; Query OK, 0 rows affected (21.70 sec)
mysql> select count(*) from t_1; +----------+ | count(*) | +----------+ | 20000 | +----------+ 1 row in set (0.01 sec)
注:上面的测试表结构,插入数据,表格行数,都可以根据需要进行修改,以便生成需要的数据测试环境。 对于MySQL的存储过程,有以下几个命令进行操作: select name from mysql.proc where db='test'; select routine_name from information_schema.routines where routine_schema='test'; show procedure status where db='test'; show create procedure test.test01;
删除存储过程的命令: drop procedure test01;
查询数据库中的存储过程: 方法一:(直接查询) select `specific_name` from mysql.proc where db = 'your_db_name' and `type` = 'procedure' 方法二:(查看数据库里所有存储过程+内容) show procedure status; 方法三:(查看当前数据库里存储过程列表) select specific_name from mysql.proc ; 方法四:(查看某一个存储过程的具体内容) select body from mysql.proc where specific_name = 'your_proc_name'; 查看存储过程或函数的创建代码 : show create procedure your_proc_name; show create function your_func_name; 删除存储过程: drop procedure your_proc_name;
但如果测试表格中存在主键,使用上面的存储过程可能出现问题,可以使用下面的存储过程: 建立测试表: CREATE TABLE t1(id1 INT,a1 INT,b1 INT,PRIMARY KEY(id1)); CREATE TABLE t2(id2 INT,a2 INT,b2 INT); CREATE TABLE t3(id3 INT NUIQUE,a3 INT,b3 INT); CREATE TABLE t4(id4 INT,a4 INT,b4 INT); CREATE TABLE t5(id5 INT UNIQUE,a5 INT,b5 INT);
建立插入数据的存储过程: 建立 while ···· end while存储过程(执行前检查执行条件): DELIMITER // CREATE PROCEDURE proc4() begin declare var int; set var=0; while var<6 do insert into t1 values(var,var,var); set var=var+1; end while; end; // DELIMITER ;
建立 repeat......end repeat 存储过程(执行后检查执行条件): DELIMITER // CREATE PROCEDURE proc01 () begin declare v int; set v=0; repeat insert into t1 values(v,v,v); set v=v+1; until v>=100 end repeat; end; // DELIMITER ; |