1. 背景

* 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

  * 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

  * 存储过程是数据库存储的一个重要的功能,但是MySQL 5.0 以前并不支持存储过程。

2. 存储过程特点

* 存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

* 存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

* 存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

* 存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

* 存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

3. 存储过程例子 [ 阶乘 ]

* 创建存储过程 proc_factorial

delimiter 设置语句结束符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> delimiter //
mysql> CREATE PROCEDURE proc_factorial
    -> (IN total INT, OUT res INT)
    -> BEGIN
    ->     DECLARE i INT;
    ->     SET i = 1;
    ->     SET res = 1;
    ->     IF total <= 0 THEN
    ->         SET total = 1;
    ->     END IF;
    ->     WHILE i <= total DO
    ->         SET res = res * i;
    ->         SET i = i + 1;
    ->     END WHILE;
    -> END; //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;

* 调用存储过程 proc_factorial, 获取10的阶乘

call 调用存储过程

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SET @res = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> call proc_factorial(10, @res);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @res;
+---------+
| @res    |
+---------+
| 3628800 |
+---------+
1 row in set (0.01 sec)

4. 存储过程总结

  * 存储过程是存储在数据库端的一组SQL语句集。

* 用户可以通过存储过程名和传参多次调用的程序模块。

* 使用灵活,可以使用流控制语句、自定义变量等完成复杂的业务逻辑。

* 提高数据安全性,屏蔽应用程序直接对表的操作,易于进行审计。

* 减少网络传输。

* 提高代码维护的复杂度,实际使用中要评估场景是否适合。

5. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1944890,如需转载请自行联系原作者

MySQL DDL操作--------存储过程最佳实战相关推荐

  1. MySQL学习——操作存储过程

    MySQL学习--操作存储过程 摘要:本文主要学习了使用DDL语句操作存储过程的方法. 了解存储过程 是什么 存储过程是一组为了完成特定功能的SQL语句集合. 使用存储过程的目的是将常用或复杂的工作预 ...

  2. MySQL DDL操作--------外键最佳实战

    1. 背景 * MySQL有两种常用的引擎类型MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束. * 本表的列必须与外键类型相同, 外键必须是外表的唯一键(或主键). * 设置外建 ...

  3. MySQL存储引擎--------Federated最佳实战

    1. 背景 * 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. * 有点类似Oracle中的数据库链接(DBLINK). 要允许这个存储引擎, ...

  4. MySQL 5.6--------SSL连接最佳实战

    1. 背景 * 在生产环境下,安全总是无法忽视的问题,数据库安全则是重中之重,因为所有的数据都存放在数据库中 * 当使用非加密方式连接MySQL数据库时,在网络中传输的所有信息都是明文的,可以被网络中 ...

  5. mysql 5.6 使用ssl_MySQL 5.6--------SSL连接最佳实战

    MySQL 5.6--------SSL连接最佳实战 https://blog.csdn.net/weixin_33670786/article/details/89776706 mysql -uro ...

  6. MySQL DDL--MySQL 5.7版本Online DDL操作

    主键索引维护 1.新增主键索引 ## 可以使用ALGORITHM=INPLACE+LOCK=NONE方式,操作期间允许读写. ALTER TABLE tb001 ADD PRIMARY KEY (ID ...

  7. mysql ddl dql_MySQL的DDL和DML及其DQL数据库操作

    数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓库. 3. 数据库的特点: 1. 持久化存储数据的.其实数据库就是一个文件系 ...

  8. mysql 5.7 ddl 原子_mysql 8 新特性二DDL操作的原子化

    MySQL 8.0支持原子数据定义语言(DDL)语句.这个特性被称为原子DDL.原子DDL语句将数据字典更新.存储引擎操作和与DDL操作相关联的二进制日志写入组合成单个原子操作.即使服务器在操作过程中 ...

  9. mysql ddl 进度_MySQL5.7 慢查询+DDL操作堵塞查询

    数据库版本: mysql> select @@version; +------------+ | @@version | +------------+ | 5.7.26-log | +----- ...

最新文章

  1. 存储组和数据库的区别?
  2. Java线程的生命周期及线程的几种状态
  3. Win7如何设置多个IP地址
  4. C# winform 窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试...
  5. 为什么要破坏JVM的双亲委派模型
  6. input file设置默认值_innodb_data_file_path设置--通过错误日志中page大小计算实际值...
  7. SQL Server 2005 分页SQL
  8. BIM族库下载——Revit人物族
  9. ubuntu16.04 gnome环境,怎么样下载使用monaco字体
  10. matlab层模型弹塑性分析,matlab弹塑性时程分析法编程
  11. Typora 免费Beta版本(Window+Mac+Linux),所见即所得,完美支持markdown的富文本格式,实时渲染可见及编辑的特点
  12. 网站服务器备案有什么危害,域名备案对服务器有影响吗
  13. 怎么可以修改pr基本图形中的文字_10、Pr中基本图形安装使用,点点就可以应用高级的字幕...
  14. 编译原理实验:自上而下语法分析
  15. command: robot --argumentfile
  16. CSS实现两端对齐(及原理)
  17. 统计学习:模型评估与选择--留出法(python实现)
  18. 如何搭建Rtmp服务结合uni-app开发直播APP
  19. Mark Text使用说明
  20. wetool个人版_wetool自动接受新好友wetool使用教程-网站

热门文章

  1. |NOIOJ|动态规划|8462:大盗阿福
  2. 程序-进程-线程 ( 多线程 )
  3. Oracle - TRUNC, ROUND, CEIL, FLOOR
  4. 华硕笔记本的U盘启动
  5. Android SQLite编程详解
  6. 【Data guard】Switchover切换
  7. 中小型公司***的配置及NAT应用案例
  8. 防火墙(ASA)高级配置之URL过滤、日志管理、透明模式
  9. 使用bat脚本添加JAVA_HOME和修改PATH
  10. 【转】关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题