- 浏览: 3505744 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
什么是存储例程?
存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令。
为什么要使用存储过程?
我们都知道应用程序分为两种,一种是基于web,一种是基于桌面,他们都和数据库进行交互来完成数据的存取工作。假设现在有一种应用程序包含了这两种,现在要修改其中的一个查询sql语句,那么我们可能要同时修改他们中对应的查询sql语句,当我们的应用程序很庞大很复杂的时候问题就出现这,不易维护!另外把sql查询语句放在我们的web程序或桌面中很容易遭到sql注入的破坏。而存储例程正好可以帮我们解决这些问题。
存储过程(stored procedure)、存储例程(store routine)、存储函数区别
Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。
其中存储过程主要完成在获取记录或插入记录或更新记录或删除记录,即完成select insert delete update等的工作。而存储函数只完成查询的工作,可接受输入参数并返回一个结果。
创建存储过程、存储函数
create procedure 存储过程名(参数)
存储过程体
create function 存储函数名(参数)
存储函数体
假设现在有一个数据库omcmc中的表db_info 表结构如下:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for db_news
-- ----------------------------
DROP TABLE IF EXISTS `db_news`;
CREATE TABLE `db_news` (
`id` int(10) NOT NULL auto_increment,
`title` varchar(200) NOT NULL,
`editor` varchar(20) default NULL,
`origin` varchar(20) default NULL,
`tags` varchar(200) default NULL,
`content` text NOT NULL,
`hits` int(10) default '0',
`ip` varchar(15) NOT NULL,
`time` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `db_news` VALUES ('1', First App', 'xqbar.com', 'xqbar.com', 'omcmc', 'detail。。', '100', '127.0.0.1', '1215051225');
使用上面的表我们创建一个简单的存储过程
create procedure select_news()
select title,hits from db_news;
在终端运行并调用
从上面的截图我们看到如何调用我们的存储过程
调用存储过程
call 存储过程名();
以上我们创建了一个简单的存储过程,当然我们的应用程序不可能使用这么简单的存储过程,我们需要的是能给存储过程传递参数,以返回给我们所需要的结果数据。下面就了解下存储过程的参数。
存储过程的参数
通常存储过程接受用户的参数,返回结果给调用用户。
mysql规定对于存储过程的参数要求其每个参数都必须声明其参数名,数据类型以及该参数是输入参数还是用于返回信息还是两者兼有,对于存储函数php只支持输入参数。
声明参数时规定要使用关键字IN,OUT,INOUT。
其中:
IN:用于输入参数
OUT:用于返回参数
INOUT:用于向存储过程传递参数值,如果该值改变则返回
另外规定对于声名为OUT,INOUT的参数当我们调用存储过程时需要在参数名前加@,以确保参数在过程外调用,下面我们修改上面的存储过程以传递信息编号给存储过程select_news,返回对应的信息标题给我们查看。
drop procedure if exists select_news;
create procedure select_news(IN id int,OUT title varchar(200))
select db_news.title from db_news where db_news.id=id;
在终端运行并调用
注意调用格式
call select_news(1,@title);
其中1是我们要传入的信息编号,title是要返回的对应信息编号标题,由于是OUT所以再调用时要在其前加@在过程外调用。(见下例)
drop procedure if exists getNum;
create procedure getNum(OUT num int)
select 100 into num;
call getNum(@num);
select @num;
截图:
php存储例程、存储过程进阶学习之二
接着上篇文章,再调用有返回值时上个例子我们可以使用以下的方法调用存储过程:
select @返回参数;
我们现在使用这个方法来调用上面我们创建的select_news,来看看
有人会疑问为什么返回的title是null,而不是像call select_news(1,@title)一样返回的是我们数据库编号对应的数据First App,这是由于我们的存储过程体并没有给title返回参数返回值。
下面我们来看看存储函数
仍然以db_news表为例说明,不过我们在这个存储函数中我们加入其他一些关于存储例程的知识来引入我们这次要谈及的学习对象。
drop function if exists count_news;
delimiter //
create function count_news(hits int) returns int
comment '根据传入的点击次数统计超过此点击数的信息数目'
begin
declare total_news int;
declare hits_num int default 0;
if hits>=0 then
set hits_num=hits;
select count(id) into total_news from db_news where db_news.hits>hits_num;
else
set total_news=0;
end if;
return total_news;
end;
//
delimiter ;
在上面的存储函数中我们使用到了存储例程变量的声明、设置其值、判断语句、存储函数特有的返回值类型及存储例程如何描述(comment).
与存储过程返回参数不同的是存储函数在定义时没用直接声明哪个变量是返回参数,而只是使用了returns声明了返回参数所属的数据类型,返回参数是在函数体中使用return返回要返回的数据变量的形式来表示的。这就需要注意的是:
存储函数只支持输入参数,并且输入参数前没有IN或INOUT.
返回上面的存储函数,我们来解释下代码含义:
drop function if exists count_news;
如果存在存储函数count_news则删除该存储函数,与存储过程一样我们可以使用下面的语句删除存储过程或函数
drop procedure|function [if exists] 存储过程名|存储函数名;
delimiter //
使用delimiter更改mysql默认使用分号(;)使用新的结束符号来结束当前语句,使用delimiter后原先默认的分号(;)结束语句符号不再起作用,直到重新恢复声明结束符后。
create function count_news(hits int) returns int
注意存储函数的参数只有输入参数并且前不再声明IN或INOUT,返回只需声明要返回的数据类型
comment '根据传入的点击次数统计超过此点击数的信息数目'
使用comment 来描述该存储过程或存储函数的功能信息。使用格式为 comment '描述字符串 '
begin
使用begin限定一个处理模块
declare total_news int;
声明变量 格式 declare 变量名 数据类型 [default 默认值]
declare hits_num int default 0;
声明变量 格式 declare 变量名 数据类型 [default 默认值]
if hits>=0 then
set hits_num=hits;
使用set 给变量赋值
select count(id) into total_news from db_news where db_news.hits>hits_num;
sql语句可以使用into给变量赋值
else
set total_news=0;
end if;
上面是一个判断语句,注意格式为if-else-end if 或者 if -else if-else-end if
注意分号(;)
return total_news;
使用return 返回存储函数要返回的值,注意该值只能是一个值。
end;
//
delimiter ;
综合一下我们上面的概念知识:
1. 存储函数的参数与存储过程有何不同。
2. 在存储例程中如何更改mysql的默认结束符号。
3. 在存储例程中如何描述功能信息。
4. 声明、设置变量。
5. begin-end语句块。
6. 条件判断if-else if-else-end if 或if-else-end if 或者if-end if
0
顶
新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正
新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑
Copyright © 1996 - 2012 SINA Corporation, All Rights Reserved
新浪公司 版权所有
<script id="PVCOUNTER_FORIE" type="text/javascript"></script><script type="text/javascript"></script><script src="http://sjs.sinajs.cn/blog7common/js/boot.js" type="text/javascript"></script><script type="text/javascript"></script><script type="text/javascript"></script>
发表评论
-
mysql重新安装
2014-02-25 20:28 1155如何彻底卸载MySQL 本 ... -
免费数据库
2014-02-06 23:00 1179http://db4free.net/d4f_appl ... -
Error: Cannot create Windows service for MySql. Error: 0
2013-07-08 09:41 1345Error:Cannot create Windows se ... -
Mac OS X 安装mysql过程
2013-05-09 04:14 1496Mac OS X 安装mysql过程 Posted on ... -
MySQL左连接、右连接
2012-10-15 14:18 1417MySQL左连接、右连接 ... -
mysql存储过程
2012-10-11 10:13 1459我们大家都知道MySQL 存储过程是从 MySQL 5. ... -
给表增加一列
2012-05-09 09:09 1433ALTER TABLE Teachers ADD COL ... -
将一张表的查询结果插入到另一张表(转)
2012-05-08 11:26 2447将一张表的查询结果插入到另一张表 方法一: 代码 ... -
mysql必知必会 over 存储过程和触发器
2012-03-01 13:48 1952========== 咒骂一句mysql必知必会,存储过程的 ... -
mysql视图的理解和使用
2012-03-01 09:32 1887CREATE TABLE tb_x ( xid ... -
mysql 删除表 创建表 等操作
2012-03-01 08:42 2611TRUNCATE TABLE tb_1;删除一张表 然后 ... -
insert 插入语句
2012-02-29 21:46 0一般不要使用没有明确给出列的列表的insert语句,这样很不安 ... -
超详细mysql left join,right join,inner join用法分析(转)
2012-02-29 21:01 1648下面是例子分析表A记录如下: aID aNum 1 a2005 ... -
mysql 多表查询的步骤
2012-02-29 15:11 1717子查询 我们很多时候的表 都是关联的比如 ... -
mysql主键
2012-02-29 11:06 1708/** * 主键 * 一列或者一组列,其值能够唯 ... -
mysql 中使用distinct的用法(转)
2012-02-29 09:29 1651山里人家 山里人家 主页博客相册个人档案好友i ... -
数据库事物的四个特性
2012-02-26 18:28 3209到现在为止才真的搞清楚这四个事件任务的意思。 我 ... -
Mysql的乱码的解决方式
2012-02-14 16:23 0/** * Mysql的乱码的解决方式 * ... -
DBCP,C3P0,Tomcat_JDBC 性能及稳定性测试(转)
2012-02-14 07:56 1741DBCP,C3P0,Tomcat_JDBC 性能及 ... -
mysql事务处理
2012-02-01 19:57 1703<!--$sinatopbar--> ...
相关推荐
mysql存储例程、存储过程、存储函数进阶学习
- 无需打开向导即可从数据网格生成快速INSERT语句MySQL存储过程调试器 - 查询分析器 - 执行计划工具等等功能 这是dbforge studio8其他版本不具备的,能够更好的用于MySQL数据库开发。 ## 2.软件 破Crack解 安装...
存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令,下面就以实例解析MySQL中的存储过程及存储过程的调用方法:
存储过程是一种存储在数据库库中的程序(就像正规语言里的子程序一样),准确的来说,MySql支持的“routine(例程)”有两种:一是我们说的存储过程,二是在其它sql语句中可以返回值的函数(使用起来和mysql预装载的...
The SHOW CREATE FUNCTION and SHOW CREATE PROCEDURE statements.The SHOW FUNCTION
《php与mysql程序设计(第4版)》是全面讲述php ...第32 章 存储例程 471 第33 章 mysql 触发器 486 第34 章 视图 493 第35 章 实用数据库查询 502 第36 章 索引和搜索 516 第37 章 事务 527 第38 章 导入和导出数据 534
本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要内容包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、 MySQL 5的存储例程、解发器和视图等。...
MySQL中文参考手册 ... ---------------------------------------------------------...MySQL建立的基础是业已用在高要求的生产环境多年的一套实用例程。尽管MySQL仍在开发中,但它已经提供一个丰富和极其有用的功能集。
common_schema DBAMySQL框架common_schema文档common_schema是MySQL服务器管理的框架。 它提供:函数库(文本函数,安全例程,执行和流程)common_...rdebug:用于MySQL存储例程的调试器和调试API。 (alpha)介绍SQ
MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上...MySQL建立的基础是业已用在高要求的生产环境多年的一套实用例程。尽管MySQL仍在开发中,但它已经提供一个丰富和极其有用的功能集。
MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上...MySQL建立的基础是业已用在高要求的生产环境多年的一套实用例程。尽管MySQL仍在开发中,但它已经提供一个丰富和极其有用的功能集。
第27章 MySQL存储引擎和数据类型 第28章 保护MySQL的安全 第29章 PHP的MySQL扩展 第30章 PHP的mysqli扩展 第31章 存储例程 第32章 MySQL触发器 第33章 视图 第34章 实用数据库查询 第35章 索引和搜索 第36章 事务 第...
mysql例程事件 生产数据库下的所有例程都将在此存储库下。
一组MySQL存储例程,用户定义函数(UDF)和MySQL插件,可帮助数据库管理员或开发人员。 UDFLib提供:LibBigInteger,LibString,LibCType,...
转储存储的例程(功能和过程)。 转储事件。 进行扩展插入和/或完全插入。 支持MySQL 5.7中的虚拟列。 确实执行插入忽略,就像REPLACE一样,但是如果存在重复的键,则忽略错误。 转储时使用挂钩即时修改数据库...
它还提供了使使用PHP中的存储过程更容易的工具-附带了一个用于生成PHP包装器的工具,该包装器用于调用存储过程,包括类型检查和完全夸大的返回值,例如,您可以返回表并获取一个包含所有行的数组,而无需单独的提取...
这个例程库收集了通用的 MySQL 5 存储过程和函数,实现了数组、for-each 循环、语法助手、命名参数、单元测试等等。
安全PHP编程 第22章 SQLite 第23章 PDO介绍 第24章 MySQL介绍 第25章 安装和配置MySQL 第26章 众多MySQL客户端 第27章 MySQL存储引擎和数据类型 第28章 保护MySQL的安全 第29章 PHP的MySQL...
UPD 存储库移至 github 更新版本 2 相同想法的新版本位于此处 创建该库是为了通过将所有基本例程减少为垃圾来简化 Web 开发。 为此提供了大量工具和功能。 该库是为 Laravel 6 开发的,仅在其上进行了测试。 ...