MySQL笔记六
来源:互联网 发布:国产网络腐剧 编辑:程序博客网 时间:2024/06/16 08:25
存储过程
存储过程也可以看作是一个“加工作坊”,它接收“调用者”传递过来的“原料”( in参数),然后将这些“原料”“加工处理”成“产品”( 存储过程的out参数或inout参数),再把“产品”返回给“调用者”。
·创建存储过程的语法格式如下。
delimiter $$
create procedure 存储过程名(参数1,参数2,…)
[存储过程选项]
begin
存储过程语句块;
end
$$
delimiter ;
1、参数列表
存储过程有三种类型的参数:in参数、out参数以及inout参数。
in代表输入参数(默认情况下为in参数),表示该参数的值必须由调用程序指定; out代表输出参数,表示该参数的值经存储过程计算后,将out参数的计算结果返回给调用程序;inout代表即是输入参数,又是输出参数,表示该参数的值即可以由调用程序指定,又可以将inout参数的计算结果返回给调用程序。
2、存储过程选项
由以下一种或几种选项组合而成。
language sql
| [not] deterministic
| { contains sql | no sql | reads sql data | modifies sql data }
| sql security { definer | invoker }
| comment ‘注释’
一般为language sql ,还有好几种。在这里就不列举出来了。如果不写存储过程选项的话,使用的是默认的。language sql 说明存储过程语句块部分是由sql语言的语句组成,也是数据库系统默认的语言。language sql:默认选项,用于说明函数体使用SQL语言编写。deterministic(确定性):当函数返回不确定值时,该选项是为了防止“复制”时的不一致性。如果函数总是对同样的输入参数产生同样的结果,则被认为它是“确定的”,否则就是“不确定”的。例如函数返回系统当前的时间,返回值是不确定的。如果既没有给定deterministic也没有给定not deterministic,默认的就是not deterministic。contains sql:表示函数体中不包含读或写数据的语句(例如set命令等)。
no sql:表示函数体中不包含SQL语句。
reads sql data:表示函数体中包含select查询语句,但不包含更新语句。
modifies sql data:表示函数体包含更新语句。如果上述选项没有明确指定,默认是contains sql。
sql security:用于指定函数的执行许可。
definer:表示该函数只能由创建者调用。
invoker:表示该函数可以被其他数据库用户调用。默认值是definer。
comment:为函数添加功能说明等注释信息。
3、存储过程的调用
调用储过程须使用call关键字,另外还要向存储过程传递in参数、out参数或者inout参数。
列如:
DELIMITER &&
CREATE PROCEDURE pro_book ( IN bT INT)
BEGIN
SELECT stuage FROM student where stuid=bT;
END
&&
DELIMITER ;
CALL pro_book(1);
DELIMITER &&
CREATE PROCEDURE pro_book5( OUT max_age INT)
BEGIN
SELECT max_age;
set max_age=55;
SELECT max_age;
END
&&
DELIMITER ;
set @max_age=1;
call pro_book5(@max_age);
select @max_age;
=====================================================================================================
DELIMITER &&
CREATE PROCEDURE pro_2 ( IN bT INT,OUT myage INT)
BEGIN
SET myage=(SELECT age FROM students where stuId=bT);
SELECT myage;
END
&&
DELIMITER ;
SET @myage=1;
CALL pro_2(2,@myage);
SELECT @myage;
DELIMITER //
CREATE PROCEDURE proc1(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM students;
END
//
DELIMITER ;
CALL proc1(@a);
SELECT @a;
4、查看存储过程的信息
·show procedure status;
·使用MySQL命令“show create procedure 存储过程名;”可以查看指定数据库指定存储过程的详细信息。show create procedure pro_book;
5、存储过程的好处:
a、存储过程或者函数可以重复使用,可以减少数据库开发人员,尤其是应用程序开发人员的工作量。
b、一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
c、使用存储过程或者函数可以增强数据的安全访问控制。可以设定只有某些数据库用户才具有某些存储过程或者函数的执行权。
- Mysql学习笔记六
- mysql阅读笔记六
- MySQL学习笔记六
- MySQL笔记六
- MySQL学习笔记(六)
- Mysql学习笔记六,视图
- mysql学习笔记(六)
- Head First PHP&MySQL学习笔记(六)
- MYSQL学习笔记(六)之子查询
- mysql学习笔记(六):JDBC详解
- 一千行MySQL学习笔记(六)
- MySQL学习笔记六:基本DML操作
- MySQL笔记六之 条件判断函数
- Mysql源代码阅读笔记(六)命令汇总
- MySQL学习笔记(六)扩展性设计之Memcached
- mysql 笔记 六 存储引擎 事务 索引 存储过程
- MySQL必知必会笔记(六)存储过程 游标 触发器
- MySQL学习笔记之六 向数据表插入行记录
- ac自动机讲解
- 一个简单的Makefile
- C++类 内存对齐和类大小理解
- 兼容CommonJS
- linux—TCP_server端编写之利用select()函数编写可多用户同时访问
- MySQL笔记六
- PythonWebCrawler-模拟浏览器爬取信息
- ios 运行微信支付demo报错
- 【STL-deque】双向队列
- Linux下的多进程编程初步
- MySQL笔记七
- QT creator 获取多个屏幕分辨率
- 不适合使用shell的场景
- android中TranslateAnimation实现左右抖动