一、存储过程
存储过程(StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
定义存储过程
procedure [prəˈsi:dʒə(r)] 程序
create procedure 过程名(参数1,参数2....)
begin
sql语句:
end
调用存储过程:
call 过程名(参数1,参数2);
默认SQL语句执行符号“; ”
使用delimiter可以修改执行符号 。
语法:
delimiter 新执行符号
例:修改;为//
mysql> delimiter //
注:因为默认执行完sql语句遇到;后,就结束了。
delimiter 分隔符 [dɪ'lɪmɪtə]
1 例子:定一个存储过程,查看category表中所有数据
delimiter // # 更改结束符号的。
创建一个存储过程:
mysql>use book;
mysql> delimiter //
mysql> createprocedure selCg()
-> begin
-> select * from category;
-> end //
Query OK, 0 rowsaffected (0.10 sec)
调用存储过程
mysql> callselCg()//
+---------+---------------+
| bTypeId |bTypeName |
+---------+---------------+
| 1 | windows应用 |
| 2 | 网站 |
| 3 | 3D动画 |
| 4 | linux学习 |
| 5 | Delphi学习 |
| 6 | 黑客 |
| 7 | 网络技术 |
| 8 | 安全 |
| 9 | 平面 |
| 10 | AutoCAD技术 |
+---------+---------------+
10 rows in set (0.15sec)
总结:一次编译,永久执行。
2、存储过程参数传递:
in 传入参数 把参数传递到过程内部。
out 传出参数
inout 传入传出参数
into 赋值
例:定义存储过程getOneBook,当输入某书籍id后,可以调出对应书籍记录
//in---传入参数 -----------------------------------------
mysql> createprocedure getOneBook(in b int)
-> begin
-> select * from books where bId=b;
-> end //
Query OK, 0 rowsaffected (0.01 sec)
mysql> callgetOneBook(3);//
+-----+-----------------------------+---------+-----------------------------+-------+------------+--------+-----------+
|bId | bName |bTypeId | publishing |price | pubDate | author | ISBN |
+-----+-----------------------------+---------+-----------------------------+-------+------------+--------+-----------+
| 3 | 网络程序与设计-asp | 2 | 北方交通大学出版社 | 43 | 2005-02-01 | 王玥 | 75053815x |
+-----+-----------------------------+---------+-----------------------------+-------+------------+--------+-----------+
1row in set (0.00 sec)
例:存储过程中 out --传出参数
into 在select 语句中表示给变量赋值。
call demo(@a); # 使用@a来接受out传出的值。 mysql中的变量表示方法: @变量名
mysql> createprocedure demo(out pa varchar(200))
begin