举例子
createdefiner = root@`%` procedure insert_batch_test(IN START int(10), IN max_num int(10))
BEGINDECLAREi INT DEFAULT 0;SET autocommit = 0;REPEATSET i = i + 1;INSERT INTO test (std, score)VALUES (CEILING(RAND() * 10 + 100), CEILING(RAND() * 50 +50));UNTIL i = max_numEND REPEAT;COMMIT;END;
这是一个 MySQL 存储过程,主要功能是往名为 test
的表中插入一批数据,插入的数据包括两个字段std 和score。以下是对存储过程代码的解释:
- 存储过程的名称是
insert_batch_test
。 - 存储过程的定义者(创建者)是root,并且在任何主机上都能够被调用(
definer =root@'%'
)。 - 存储过程接受两个输入参数:
START
和max_num
,它们的数据类型都是整数(int(10)
)。 - 存储过程使用
DECLARE
关键字声明了一个局部变量i
,初始化为 0。 SET autocommit = 0;
语句将事务的自动提交模式关闭,这意味着插入数据后需要手动执行COMMIT;
才能提交事务。- 使用
REPEAT ... UNTIL
循环,循环体中包含了一条插入语句,向test 表中插入数据。CEILING(RAND()*10+100)
生成一个随机数,并将其上取整,确保在一定范围内。- 插入的数据的std 和score 字段都是随机生成的整数。
- 循环的次数受到输入参数
max_num
的控制。
UNTIL i = max_num
表示循环的条件,当i
达到max_num
时跳出循环。COMMIT;
语句用于手动提交事务,确保之前的插入操作生效。
这个存储过程的作用是往表中插入一批随机生成的数据,批量插入的数量由输入参数 max_num
控制。如果你调用这个存储过程,需要提供适当的参数值。