MYSQL 存储过程学习
2015-08-24 17:40
585 查看
MYSQL 存储过程学习笔记MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
存储过程的优点:①重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。②提高性能。存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。③减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。④安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
创建简单的事例表有id,和name两个字段,并插入5条数据如下:
OUT 输出参数:该值可在存储过程内部被改变,并可返回;
INOUT 输入输出参数:调用时指定,并且可被改变和返回。
IN参数例子:
[/b][/b][/b]
存储过程的优点:①重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。②提高性能。存储过程在创建的时候在进行了编译,将来使用的时候不再重新翻译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。③减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。④安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。
创建简单的事例表有id,和name两个字段,并插入5条数据如下:
mysql> create table t1(id int not null primary key,name varchar(20) default null);
mysql> insert into t1 values(1,'name1'),(2,'name2'),(3,'name3'),(4,'name4'),(5,'name5'); mysql> select * from t1;
+----+-------+ | id | name | +----+-------+ | 1 | name1 | | 2 | name2 | | 3 | name3 | | 4 | name4 | | 5 | name5 | +----+-------+ 5 rows in set (0.00 sec)MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值;
OUT 输出参数:该值可在存储过程内部被改变,并可返回;
INOUT 输入输出参数:调用时指定,并且可被改变和返回。
IN参数例子:
mysql> delimiter // mysql> create procedure p_in(IN p_id int) -> begin -> delete from t1 where id = p_id; -> end -> // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> call p_in(5); Query OK, 1 row affected (0.03 sec) mysql> select * from t1; +----+-------+ | id | name | +----+-------+ | 1 | name1 | | 2 | name2 | | 3 | name3 | | 4 | name4 | +----+-------+ 4 rows in set (0.00 sec)[b]OUT参数例子:[/b]
mysql> delimiter // mysql> create procedure p_out(OUT p_out int) -> begin -> select count(id) from t1 into p_out; -> end -> // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> call p_out(@p_out_result); Query OK, 1 row affected (0.00 sec) mysql> select @p_out_result; +---------------+ | @p_out_result | +---------------+ | 4 | +---------------+ 1 row in set (0.00 sec)[b][b]同时存在IN,OUT参数:[/b][/b]
mysql> delimiter // mysql> create procedure p_in_out(IN p_in int,OUT p_out int) -> begin -> delete from t1 where id =p_in; -> select count(id) from t1 into p_out; -> end -> // Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> select @p_in_out_result; +------------------+ | @p_in_out_result | +------------------+ | 3 | +------------------+ 1 row in set (0.00 sec) mysql> select * from t1; +----+-------+ | id | name | +----+-------+ | 1 | name1 | | 2 | name2 | | 3 | name3 | +----+-------+ 3 rows in set (0.00 sec)[b][b][b]INOUT参数:[/b][/b][/b]
mysql> select * from t1;[b][b][b]后面继续学习在存储过程中加入流程控制语句!
+----+-------+ | id | name | +----+-------+ | 1 | name1 | | 2 | name2 | | 3 | name3 | | 4 | name4 | | 5 | name5 | +----+-------+ 5 rows in set (0.00 sec)
mysql> delimiter //
mysql> create procedure p_inout(INOUT p_inout int)
->begin
->select p_inout;
->set p_inout=4;
->select p_inout;
-> delete from t1 where id =p_inout;
->end
->//
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> set @p_input=5;
mysql> call p_inout(@p_input);
+---------+
| p_inout |
+---------+
| 5 |
+---------+
1 row in set (0.00 sec)
+---------+
| p_inout |
+---------+
| 4 |
+---------+
1 row in set (0.00 sec)
[/b][/b][/b]
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜