MySQL 存储过程是从 MySQL 5.0 开始增加的新功能,目的是数据库 SQL 语言层面的代码封装与重用。
DROP PROCEDURE IF EXISTS proc_initData;
DELIMITER $
CREATE PROCEDURE proc_initData()
BEGIN
DECLARE i INT DEFAULT 80000;
WHILE i>0 DO
insert into SC (sc_id,s_id,c_id,score) value (i, FLOOR(RAND() * 10), FLOOR(RAND() * 10), FLOOR(RAND() * 100));
SET i = i-1;
END WHILE;
END $
CALL proc_initData();
DELIMITER ;
- DROP PROCEDURE IF EXISTS proc_initData
查询是否有该存储过程,如果有,停止它- DELIMITER $
定义分隔符为 $ ,因为存储过程语句中含有;
分隔的语句,避免和存储过程语句本身混淆- CREATE PROCEDURE proc_initData()
创建一个 名为 proc_initData 的存储过程- BEGIN
begin 和 end 是mysql中复合语句的定界符。- END $
结束,自定义的分隔符$
表示到这里该语句结束- DECLARE i INT DEFAULT 80000;
定义变量 i 类型为 int,初始默认值为 80000- WHILE i>0 DO
开启循环语句,如果i
大于0,则执行下面语句- insert into SC (sc_id,s_id,c_id,score) value (i, FLOOR(RAND() * 10), FLOOR(RAND() * 10), FLOOR(RAND() * 100));
写入数据- SET i = i-1;
设置 i 的值,每执行一次对该值进行更新- END WHILE;
循环语句结束- CALL proc_initData();
在定义好该存储过程后,执行调用- DELIMITER ;
恢复分隔符为默认的;
show procedure status where db='数据库名';
show create procedure 数据库.存储过程名;
# (入参类型 变量名 变量类型, ...)
create procedure proc_initData(in i_int int, out o_varchar varchar(255))
由 floor() 和 rand() 配合使用可以随机生成任何区域值:
# 生成一个 0 ~ 100 的数
floor(rand()*100)
# 生成一个 0 ~ 12 的数
floor(rand()*12)
# 生成一个 5~95 的数
floor(5+rand()*90)