MySql存储过程
来源:互联网 发布:照片视频软件 编辑:程序博客网 时间:2024/06/10 23:23
今天终于接触到数据库存储过程这个神奇的东西了,数据库存储过程是一个为了提高数据库查询性能而产生的一个产品,存储过程其实是一个数据集,它一经生成,便可以永久的存在数据库,当第一次调用的时候,存储过程会把数据暂时保存在一个缓存里面,当第二次调用的时候,数据库直接从缓存里面拿数据,而不是在数据库里面拿数据,这样就避免了用户频繁向数据库里面查询数据,大大节省了资源,并且大大提高了效率。
在数据库里面建立存储过程也很简单。
下面是一个参考例子:
DROP PROCEDURE
IF EXISTS students;
delimiter //
CREATE PROCEDURE students (id VARCHAR(255))
BEGIN
SELECT
a.*
FROM
student AS a
WHERE
a.id = id ;
END//
第一个部分的意思是检查数据库里面是否已经存在该存储过程了,如果存在,删除,这个语句非常好用,在数据库查询的其他地方也经常使用。
delimiter 是一个关键字,生命存储过程运行和结束的标志,这里是以双斜杠//标志,当然,也可以选用其他的标点符号例如$、,等进行标志。
MySql建立存储过程的语法跟其他数据库的有很大的区别,在这里要特别注意一下。声明的变量必须包含在括号里面,里面的参数有三种类型,一般是in、
out、或者inout,在三个类型的参数基本的功能都是传递参数,但是,他们在查询体里面的变化却不一样,in的话经过了查询体初始值不会改变,后面两个都会改变,
也可以定义多个参数,用逗号隔开。
调用存储过程也非常简单,而且很方便,原生的jdbc跟hebernate都支持存储过程的查询,不过总的来说还是利用hebernate的SQL查询最方便。
下面先列出一个SQL查询的java例子:
@Override
public List<Student> getAllByProcedure() {
String sql="call students(?);";
SQLQuery query=getSession().createSQLQuery(sql).addEntity(Student.class);
query.setString(0,"s");
List<Student> list=query.list();
return list;
}
注意,传递参数的位置要从0开始。
如果要直接查询的话,用一条语句就可以搞定:
call students('s');
如果有多个参数的话,同样是用逗号隔开。
另外还用一些存储过程的特定命令,用起来很有趣:
查看某个数据库的存储过程:
show procedure status where Db='test';
查看所有数据库的话使用命令:
show procedure status;
另外还有一个非常有趣的例子,利用存储过程计算数据输入输出:
create procedure pr_add
(
a int,
b int
)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as sum;
end;
总的来说,存储过程这东西很好玩,玩一下就知道了!!- 【mysql】mysql存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- 中国剩余定理(笔记)
- 前端编码规范总结:HTML
- 逻辑推理与判断(谜语博士的难题(1))
- uva 140 Bandwidth (全排列+暴力枚举)
- mysql 5.6.14 win7 32位免安装版配置
- MySql存储过程
- DP之背包学习记录(一)
- 【 D3.js 选择集与数据详解 — 4 】 enter和exit的处理方法以及处理模板
- 南邮1004:线性表操作
- 百度敏捷之旅
- Java常用类库..【Pnoter】
- 通过阅读、分析和翻译二进制格式的Java Class文件学习Java Class的技术
- 逻辑推理与判断(谜语博士的难题(2))
- Android 实现形态各异的双向侧滑菜单 自定义控件来袭