mysql - 存储过程

576 阅读4分钟

存储过程

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

语法

声明结束符,避免与mysql语句结束符 分号 冲突,并在存储过程结束时,还原为分号

DELIMITER #

声明存储过程

CREATE PROCEDURE demo_in_parameter(IN p_in int)       

存储过程开始/结束符

BEGIN .... END    

变量赋值:

SET @p_in=1  

变量定义:

DECLARE l_int int unsigned default 4000000; 

条件语句:

if parameter=0 then 
    update t set s1=s1+1;
else
    update t set s1=s1+2; 
end if;

循环语句

declare var int;  
set var=0;  
while var<6 do  
    insert into t values(var);  
    set var=var+1;  
end while;  

存储过程实例

定义存储过程

delimiter ?
drop procedure batch_version_step ?
create procedure batch_version_step(in max int)
begin
declare start int default 0;
declare i int default 0;
set autocommit = 0;  
while i < max do
   set i = i + 1;
   insert into t_dcms_version_step(create_by,create_time,del_flag,update_by,update_time,version_id,world_id,topic_id,type,content,status,class) 
   values (0,1573528839,0,0,1573528851,3,'-LssKL9rSbi5lM4P08qh','-LssNAtsEhswj9KY05iM',2,'{"source":"cms/prod/world/-LssKL9rSbi5lM4P08qh/topic/-LssNAtsEhswj9KY05iM/1.Nanobots.png","target":"cms/prod/publish/3/world/-LssKL9rSbi5lM4P08qh/topics/-LssNAtsEhswj9KY05iM/1.Nanobots.png"}',3,0);
end while;
commit;
end ?
delimiter ;

调用存储过程

call batch_version_step(1000000); 

自定义存储过程函数

生成随机字符串

drop procedure if exists  randstr;
delimiter ?
create procedure  randstr(num int(11))     
begin
declare str char(255)  default 'q1we23r4t5y6u7i8o9p0asdfghjklzxcvbnm';
declare nums int(11);
declare returnstr char(255);                       #SQL变量名不能和列名一样
declare i int(11) default  0;                   
select floor(truncate(rand(),1)*36)+1 into nums;   #加1时为了防止产生随机数生成0的情况
select substring(str,nums-1,1)  into returnstr;
while  i < num do
    select floor(truncate(rand(),1)*36)+1 into nums;
    select concat(substring(str,nums,1),returnstr) into returnstr;
    set i=i+1;
end while;
select returnstr as randstr;
end ?
delimiter ;

结合存储过程和函数

delimiter ?
drop procedure if EXISTS `batch_cms_world` ?
create procedure batch_cms_world(in max int)
begin
declare start int default 0;
declare i int default 0;
declare wid char(255) default "defaultWid";
declare wname char(255) default "defaultName";
set autocommit = 0;  
while i < max do
   set i = i + 1;
   select substring(md5(rand()),1,10) into wid;
   select substring(md5(rand()),1,10) into wname; 
   insert into t_dcms_world(create_by,create_time,del_flag,update_by,update_time,world_id,name,content,`index`) 
   values(0,0,0,0,0,wid,wname,'{"id":"-M18dFH6ZqcZHMfczl2V","name":"world4","backgroundImage":{"uid":"rc-upload-1582855337169-415","name":"背景图2.png","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vc49e50e97aa24219ef0ecd80b5c739e2.png","size":99802,"status":"done"},"backgroundStories":[{"image":{"uid":"rc-upload-1582855337169-419","name":"DIYStep1.png","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V0f11d5bb594dfda07a50a425112fd3f1.png","size":953207,"status":"done"},"audio":{"uid":"rc-upload-1582855337169-431","name":"DIYStep1.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V0f11d5bb594dfda07a50a425112fd3f1.mp3","size":164036,"status":"done"},"eye":{"uid":"rc-upload-1582855337169-437","name":"eye_found.json","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vc9b92fd632d91188d26a29b2e9296d96.json","size":94627,"status":"done"}},{"image":{"uid":"rc-upload-1582855337169-424","name":"DIYStep2.png","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Ve7decdca49d5d99c8c1808c419aec431.png","size":905934,"status":"done"},"audio":{"uid":"rc-upload-1582855337169-433","name":"DIYStep2.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Ve7decdca49d5d99c8c1808c419aec431.mp3","size":236072,"status":"done"},"eye":{"uid":"rc-upload-1582855337169-439","name":"eye_Line 007a.json","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V50b8ede2ac86f020295dc738a90a031b.json","size":11148,"status":"done"}},{"image":{"uid":"rc-upload-1582855337169-429","name":"DIYStep3.png","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V866fb3ea927ada69d31003dd7e11d6b6.png","size":1024966,"status":"done"},"audio":{"uid":"rc-upload-1582855337169-435","name":"DIYStep3.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V866fb3ea927ada69d31003dd7e11d6b6.mp3","size":266348,"status":"done"},"eye":{"uid":"rc-upload-1582855337169-441","name":"eye_found.json","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vc9b92fd632d91188d26a29b2e9296d96.json","size":94627,"status":"done"}}],"playListMusic":{"uid":"rc-upload-1582855337169-443","name":"背景音乐4.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vc970ddeb9c2a8a06898df145f9961b49.mp3","size":3797703,"status":"done"},"slideShowMusic":{"uid":"rc-upload-1582855337169-445","name":"背景音乐4.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vc970ddeb9c2a8a06898df145f9961b49.mp3","size":3797703,"status":"done"},"unlockRestriction":1,"unlockStories":[{"image":{"uid":"rc-upload-1582855337169-453","name":"DIYStep1.png","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V0f11d5bb594dfda07a50a425112fd3f1.png","size":953207,"status":"done"},"audio":{"uid":"rc-upload-1582855337169-459","name":"DIYStep1.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V0f11d5bb594dfda07a50a425112fd3f1.mp3","size":164036,"status":"done"},"eye":{"uid":"rc-upload-1582855337169-465","name":"eye_found.json","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vc9b92fd632d91188d26a29b2e9296d96.json","size":94627,"status":"done"}},{"image":{"uid":"rc-upload-1582855337169-455","name":"DIYStep2.png","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Ve7decdca49d5d99c8c1808c419aec431.png","size":905934,"status":"done"},"audio":{"uid":"rc-upload-1582855337169-461","name":"DIYStep2.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Ve7decdca49d5d99c8c1808c419aec431.mp3","size":236072,"status":"done"},"eye":{"uid":"rc-upload-1582855337169-467","name":"eye_Line 007a.json","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V50b8ede2ac86f020295dc738a90a031b.json","size":11148,"status":"done"}},{"image":{"uid":"rc-upload-1582855337169-457","name":"DIYStep3.png","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V866fb3ea927ada69d31003dd7e11d6b6.png","size":1024966,"status":"done"},"audio":{"uid":"rc-upload-1582855337169-463","name":"DIYStep3.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V866fb3ea927ada69d31003dd7e11d6b6.mp3","size":266348,"status":"done"},"eye":{"uid":"rc-upload-1582855337169-469","name":"eye_found.json","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vc9b92fd632d91188d26a29b2e9296d96.json","size":94627,"status":"done"}}],"unlockMemoryMusic":{"uid":"rc-upload-1582855337169-471","name":"背景音乐4.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vc970ddeb9c2a8a06898df145f9961b49.mp3","size":3797703,"status":"done"},"levelUpAudios":[{"audio":{"uid":"rc-upload-1582855337169-473","name":"audio_Answer_Dog.mp3","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2Vfe3916ca71c7c627034069ebd5b3a0b5.mp3","size":205375,"status":"done"},"eye":{"uid":"rc-upload-1582855337169-475","name":"video.json","url":"https://corbit-dev-868303926763-us-east-1.s3.amazonaws.com/cms/test/world/-M18dFH6ZqcZHMfczl2V421b47ffd946ca083b65cd668c6b17e6.json","size":23506,"status":"done"}}]}',i);
end while;
commit;
end ?
delimiter ;

注意:

  • 表字段与数据库关键字冲突,字段名用 `` 包裹