首页 / MYSQL / MySQL存储过程简介
MySQL存储过程简介
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL存储过程简介,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4122字,纯文字阅读大概需要6分钟。
内容图文
![MySQL存储过程简介](/upload/InfoBanner/zyjiaocheng/518/64bb90380d1640a3949fc93b5d084e4e.jpg)
存储过程是在大型数据库系统中一组为了完成特定功能的SQL语句集,存储在数据库中。存储过程经过第一次编译后,再次调用不需要编译,用户可以通过指定的存储过程名和给出一些存储过程定义的参数来使用它。存储过程就是为以后使用而保存的一条或多条SQL语句,个人理解跟函数类似,一般用的较少。
好处:
- 通过把处理封装在一个易用的单元中,可以简化复杂的操作。
2.不需要反复建立一系列的处理步骤,因而保证了数据的一致性。
3.简化了对变动的管理,这一点的延伸就是安全性。
4.存储过程通常以编译过的形式存储,所以DBMS处理命令所需的工作量少,提高了性能。
缺点:
1.可移植性差
2.对于简单的SQL语句,存储过程没什么优势
4.如果只有一个用户使用数据库,那么存储过程对安全也没什么影响
5.团队开发时需要先统一标准,否则后期维护成本大
6.在大并发量访问的情况下,不宜写过多涉及运算的存储过程
7.业务逻辑复杂时,特别是涉及到对很大的表进行操作的时候,不如在前端先简化业务逻辑
二、存储过程语法格式
一般形式
create procedure [过程名]([in|out|inout] [参数名] [参数类型],...)
begin
[SQL语句集;]
end
在定义参数部分时in表示传入参数,读取外部变量值赋给内部参数,但内部参数的作用域仅限存储过程;out表示传出参数,将内部参数传递到外部变量;inout既有in的功能,又用out的功能,属于in与out的结合体。在都不写的情况下,默认使用in选项
但是,由于SQL语句集部分一样使用的是分号(;)作为分隔符,所以要在创建存储过程前使用delimiter重新定义分隔符,并在创建完成后将分隔符还原。delimiter [新分隔符]
完整格式
delimiter [新分隔符]
create procedure [过程名]([in|out|inout] [参数名] [参数类型],...)
begin
SQL语句集;
end[新分隔符]
delimiter;
三、存储过程创建举例说明:
1.创建单条SQL存储过程select_id(),(没什么实际意义,仅仅举例)
delimiter //
create procedure select_id(inout id_inout int)
begin
select user_id from user where user_id=id_inout;
end//
delimiter;
##创建存储过程select_id()
2.创建好存储过程select_id()后,会保存在数据库中。如果创同名的存储过程会报错,若要创建相同名称的存储过程,需要删除后方可创建。
PROCEDURE select_id already exists
- 创建多条SQL存储过程select_ids()
delimiter $$
create procedure select_ids()
begin
select user_id from user;
select customer_id from user;
end$$
delimiter;
四、调用存储过程
调用存储过程很简单,call [过程名](@[外部参数名],.
调用select_id()
set@user_id=62356;
call select_id(@user_id);
或者
call select_id(62356)
调用select_ids()
call select_ids();
五、查看存储过程
1.查看存储过程具体内容
show create procedure test.select_id;
2.查看存储过程状态
show PROCEDURE status;
六、删除存储过程
drop procedure [过程名];
drop procedure test.select_id;
七、SQL语句集延伸说明
1)定义存储过程的内部变量
定义变量语句:declare [变量名,...] [变量类型] [default 默认值];
赋值语句:set [变量名]=[表达式];
可以一次定义多个同类型的变量,并且设置初始值。
2)多层嵌套
mysql> delimiter //
mysql> create procedure select3()
-> begin
-> declare name varchar(20) default ‘学生‘;
-> select name;
-> begin
-> declare name varchar(20) default ‘老师‘;
-> select name;
-> end;
-> end //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
3)条件语句
if语句
if [判断语句] then
[执行内容]
end if;
if [判断语句] then
[执行内容]
else
[执行内容]
end if;
case语句
case [变量名]
when [值] then
[执行内容]
when [值] then
[执行内容]
...
else
[执行内容]
end case;
循环语句
while语句,先判断后运行
while [判断语句] do
[执行内容]
end while
mysql> create procedure `while`(in num int)
-> begin
-> declare var int;
-> set var=0;
-> while var<num do
-> set var=var+1;
-> end while;
-> select var;
-> end //
repeat语句,先运行后判断
repeat
[执行内容]
until [判断语句]
end repeat;
mysql> create procedure `repeat`(in num int)
-> begin
-> declare var int;
-> set var=0;
-> repeat
-> set var=var+2;
-> until var>num
-> end repeat;
-> select var;
-> end //
loop语句,运行直到遇到leave
[标签名]:loop
[执行内容]
leave [标签名]
[执行内容]
end loop;
mysql> create procedure `loop`(in num int)
-> begin
-> declare var int;
-> set var=0;
-> label1:loop
-> set var=var+2;
-> if var>num then
-> leave label1;
-> end if;
-> end loop;
-> select var;
-> end //
MySQL存储过程简介
标签:creat 易用 bms 性能 删除存储 情况 mysq ase mysql存储过程
本文系统来源:https://blog.51cto.com/13689359/2462364
内容总结
以上是互联网集市为您收集整理的MySQL存储过程简介全部内容,希望文章能够帮你解决MySQL存储过程简介所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。