MySQL5新特点(存储过程)

2016-02-19 20:42 1 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享MySQL5新特点(存储过程)吧。

【 tulaoshi.com - 编程语言 】

  支持存储过程是MySQL5中一个很重要的新增特性。虽然有些用户不希望将反映业务逻辑的流程通过存储过程封装在数据库中,但大多数的数据库管理人员还是非常喜欢在数据库中能使用存储过程这一功能,因为存储过程有很多好处:

  用户可以重用代码和更改控制

  -和将业务逻辑流程写入多个应用程序不同的是,用户只需要写 一次存储过程就可以立刻使用许多应用程序来调用该过程,从而实现特定的业务逻辑流程。数据库管理员也可以通过标准的管理函数来处理不同版本中的数据库资源,比如数据库结构 和安全权限等。

  可以获得快速的性能

  -管理员可以存储过程中使用循环结构来执行多个SQL语句,而之前应用程序每次只能执行一条SQL语句,效率明显得到提高,也可以把复杂的多个SQL语句写入一个存储过程,不太熟练SQL语句的用户可以直接调用该存储过程,从而避免了在书写复杂SQL语 句时可能出现的错误。

  更容易的安全管理特性

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  -对于一个服务大量不同用户的复杂数据库来说,将数量巨大的数据对象的使用权限分配给不同用户是相当费时的,使用存储过程以后,就可以在过程级进行权限 分配的任务,比如,当用户的一个SQL查询语句需要访问10张不同的表时,若不用存储过程, 就需要为该用户进行10次不同的表许可权限分配,而使用存储过程后只需要对含有该SQL查询 语句的存储过程分配一次许可权限就可以了。

  减少了网络通信流量

  -原先通过网络的多次调用,写入单个存储过程中放在服务器端后,进行一次存储过程调用就可以完成,从而减少了过量的网络通信流量。

  很象DB2数据库,MySQL5中的存储过程也完全符合ANSI SQL 2003标准,非常方便开发人员和数据库管理员学习和使用,而且select查询语句的返回结果也很直观,无须专用的调用包和参考游标,这点类似于微软SQLserver和sybase数据库,下面是一个关于输出的例子:

mysql delimiter //
mysql create procedure top_broker()
    - select a.broker_id,
    -        a.broker_first_name,
    -        a.broker_last_n
    -        sum(broker_commission) total_commissions
    -   from broker a,
    -        client_transaction b
    -   where a.broker_id=b.broker_id
    - group by a.broker_id,
    -        a.broker_first_name,
    -        a.broker_last_name
    - order by 4 desc;
    - //
Query OK, 0 rows affected (0.00 sec)
mysql delimiter ;
mysql call top_broker();

  为了处理标准的查询输出,MySQL5的存储过程中支持了许多常见的开发构造,比如:

  输入/输出参数;
  变量定义;
  带EXIST检查的循环;
  逻辑条件判断(if,case等);
  条件处理柄;
  存储过程调用存储过程;
  对事务处理类数据库表的“提交/撤销”功能支持;
  数据定义语句等等。
  数据库开发和管理人员可以通过create,alter,drop,grant来具体操作MySQL5中的存储过程, 除了获得元数据的特殊存储过程,还可以通过如下方法来操作存储过程:
  使用show procedure status函数;
  查询mysql.proc内置表;
  使用MySQL5的另一个新特性-information_schema数据字典来实现。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1624333.html

延伸阅读
标签: MySQL mysql数据库
1. Sample Problem: Log Of Failures 问题样例:故障记录 当INSERT失败时,我希望能将其记录在日志文件中我们用来展示出错处理的问题样例是很普通的。我希望得到错误的记录。当INSERT失败时,我想在另一个文件中记下这些错误的信息,例如出错时间,出错原因等。我对插入特别感兴趣的原因是它将违反外键关联的约束 2. Sample Problem: Log Of ...
一开始用phpMyAdmin来执行,后来出现一堆错误,后来去掉了begin,end之后可以正常执行,但要执行存储过程,在phpMyAdmn中不行,而在mysql命令行文本框中就可以。 接下来又遇到更难的问题,在存储过程中加入预处理语句,更不行了,在mysql命令行文本框下执行同样,下面的运行记录,给大家参考,能否有高手来帮助。 代码如下: mysql CREATE PRO...
基本语法: CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]     VIEW view_name [(column_list)]     AS select_statement     [WITH [CASCADED | LOCAL] CHECK OPTION] This statement creates a new view, or replaces an existing one if the OR REPLACE clause is giv...
约定和编程风格 每次我想要演示实际代码时,我会对mysql客户端的屏幕就出现的代码进行调整,将字体改成Courier,使他们看起来与普通文本不一样(让大家区别程序代码和正文)。在这里举个例子: mysql DROP FUNCTION f; Query OK, 0 rows affected (0.00 sec) 如果实例比较大,则需要在某些行和段落间加注释,同时我会用将"--"符号放在页面的...
就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER// dropprocedureifexists findLChild// /*iid递归父节点,layer允许递归深度*/ CREATEPROCEDUREfindLChild(iidbigint(20),layerbigint(20)) BEGIN /*创建接受查询的临时表*/ createtemporar...

经验教程

855

收藏

45
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部