MySQL 存储过程基础
摘要: - https://www.runoob.com/w3cnote/mysql-stored-procedure.html - https://blog.csdn.net/chinafire525/article/details/91374469 - https://blog.csdn.net/weixin_39662432/article/details/112713981
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 简而言之,就是一次调用,可以实现多个sql语句,而且带有逻辑性。
复制
DELIMITER $$
#生成一个随机的字符串,n代表位数
create function rand_string(n int) returns varchar(255)
begin
declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
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$$
#生成一个随机的数字
create function rand_num() returns int(5)
begin
declare i int default 0 ;
set i = floor(100+rand()*10);
return i ;
end$$
#创建插入数据的存储过程
crate procedure insert_emp(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 emp(name,age) values(rand_string(6),(start+i));
until i = max_num
end repeat;
commit;
end$$
call insert_emp(100,5000000);
定义结束符号
DELIMITER $$
或
DELIMITER //
默认情况下,delimiter “;” 用于向 MySQL 提交查询语句。在存储过程中每个 SQL 语句的结尾都有个 “;”,如果这时候,每逢 “;” 就向 MySQL 提交的话,当然会出问题了。
声明过程或函数
create procedure 存储过程名(参数)
create function 存储函数名(参数)
过程中可以应用多个函数。可以将过程视为开始和结束一个完成流程,而函数则是其中一个组成元素。
调用
call 存储过程名(参数)
过程和函数中的语句
参数
CREATE PROCEDURE one_name(in param1 int, in param2 varchar(10), ...)
-
IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
-
OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
-
INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
结构体
以begin开始,以end结束(可嵌套)
定义变量
DECLARE variable_name datatype [DEFAULT value];
定义赋值
SET 变量名 = 表达式值
变量作用域
最近的一个BEGIN_END结构体内。
逻辑语句
-
if-then-else-end if 语句
-
case-when-end cash语句:
-
while do ···· end while
-
repeat… until···· end repeat
-
loop ·····endloop
-
LABLES 标号 标号可以用在 begin repeat while 或者 loop 语句前,语句标号只能在合法的语句前面使用。可以跳出循环,使运行指令达到复合语句的最后一步。
-
ITERATE迭代