MySQL存储过程简介
来源:互联网 发布:淘宝无线端优惠券 编辑:程序博客网 时间:2024/05/29 10:40
摘要:
这是一篇关于MySQL的文章,主要介绍 MySQL 存储过程
1. 存储过程简介
存储过程是对代码的封装,具有自己的变量和控制语句
2. 创建储存过程
- 基本语法
-- 重新定义分隔符 delimiter $$ create procedure sp_name() begin ... end$$ -- 更改分隔符 delimiter ; -- 调用 call sp_name()
3. 查看存储过程
- 通过
show
语句
show procedure status\G
- 通过查看系统表
desc information_shcema.routines;select * from information_shcema.routines\G
- 查看详细状态
show create procedure_user procedure_name\G
4. 删除存储过程
mysql> drop procedure if exists database_name.procedure_name;
5. 流程控制
5.1 循环
- while
mysql> create table t1(id int);mysql> delimiter $$mysql> create procedure proce_while() -> begin -> declare i int; --声明了一个int类型的变量i -> set i = 1; -> while i < 5 do -> insert into t1 values(i); -> set i = i + 1; -> end while; -> end$$mysql> delimiter ;
- repeat
-- repeat 类似于do whilemysql> delimiter $$mysql> create procedure proce_repeat() -> begin -> declare i int default 1; --创建一个int型变量且默认为1 -> repeat -> insert into t1 values(i); -> set i = i + 1; -> until i >= 6 -> end repeat; -> end$$Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;
- loop
mysql> delimiter $$mysql> create procedure proce_loop() -> begin -> declare i int default 1; -> xff: loop -> insert into t1 values('xff'i); -> set i = i + 1; -> if i >= 6 then -> leave xff; -> end if; -> end loop; -> end$$
6. 输入输出类型
6.1 参数类型
- in
这种类型的参数只在存储过程内部起作用
mysql> delimiter $$mysql> create procedure proce_param_in(in id int) -> begin -> if(id is null) then -> select 'id is null' as id_null; --会打印一句话 -> else -> set id = id + 1; -> end if; -> select id as id_inside; -- 会打印出id的值 -> end$$Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;mysql> call proce_param_in(null);+------------+| id_null |+------------+| id is null |+------------+1 row in set (0.00 sec)+-----------+| id_inside |+-----------+| NULL |+-----------+1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> set @id = 20; --设置一个变量id = 20Query OK, 0 rows affected (0.00 sec)-- 存储过程里面的值改变并不影响存储过程外部的值mysql> call proce_param_in(@id);+-----------+| id_inside |+-----------+| 21 |+-----------+1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> select @id;+------+| @id |+------+| 20 |+------+1 row in set (0.00 sec)
- out
需要传入一个变量,存储过程会改变这个变量,变量的值是无法传入的
mysql> delimiter $$mysql> create procedure proce_param_out(out id int) -> begin -> select id as id_inside_1; -> if(id is not null) then -> set id = id + 1; -> select id as id_inside_2; -> else -> select 100 into id; -> end if; -> select id as id_inside_3; -> end$$Query OK, 0 rows affected (0.01 sec)mysql> delimiter ;mysql> set @id = 200;Query OK, 0 rows affected (0.00 sec)-- 不会把参数的值传入到存储过程中mysql> call proce_param_out(@id);+-------------+| id_inside_1 |+-------------+| NULL |+-------------+1 row in set (0.00 sec)+-------------+| id_inside_3 |+-------------+| 100 |+-------------+1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)-- 这里更改了id变量的值mysql> select @id;+------+| @id |+------+| 100 |+------+1 row in set (0.00 sec)
- in out
mysql> delimiter $$mysql> create procedure proce_param_inout(inout id int) -> begin -> select id as id_inside_1; -> if(id is not null) then -> set id = id + 1; -> select id as id_inside_2; -> else -> select 100 into id; -> end if; -> select id as id_inside_3; -> end$$Query OK, 0 row affected (0.00 sec)mysql> select 100 into @id;Query OK, 1 row affected (0.00 sec)-- 会把id的值传入存储过程并改变mysql> call proce_param_inout(@id);+-------------+| id_inside_1 |+-------------+| 100 |+-------------+1 row in set (0.00 sec)+-------------+| id_inside_2 |+-------------+| 101 |+-------------+1 row in set (0.00 sec)+-------------+| id_inside_3 |+-------------+| 101 |+-------------+1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> select @id;+------+| @id |+------+| 101 |+------+1 row in set (0.00 sec)
阅读全文
0 0
- Mysql 存储过程简介
- Mysql存储过程-简介
- mysql存储过程简介
- MySQL存储过程简介
- MySQL存储过程(1)--简介
- Mysql存储过程简介与操作
- mysql存储过程简介(仅供参考)
- 存储过程简介
- sql,存储过程简介
- 存储过程简介
- 存储过程简介
- 存储过程简介
- xp_cmdshell 存储过程简介
- 数据库存储过程简介
- 存储过程简介
- oracle存储过程简介
- 存储过程简介
- Oracle存储过程简介
- python 学习 第一天
- Node库收集
- 物联网体系介绍一:概述
- nyoj+二分前缀和
- Android瀑布流
- MySQL存储过程简介
- Hadoop
- swiper中ajax获取数据不能滑动问题
- VC5.5安装完成后初次登录报错
- Windows上创建Emacs配置文件
- (一)Lucene创建索引步骤
- openCV学习之路【2】---OpenCV之数据结构
- Hadoop
- Windows10系统下ftp服务器的搭载遇到的问题