MySQL DDL操作--------存储过程最佳实战
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操作--------存储过程最佳实战相关推荐
- MySQL学习——操作存储过程
MySQL学习--操作存储过程 摘要:本文主要学习了使用DDL语句操作存储过程的方法. 了解存储过程 是什么 存储过程是一组为了完成特定功能的SQL语句集合. 使用存储过程的目的是将常用或复杂的工作预 ...
- MySQL DDL操作--------外键最佳实战
1. 背景 * MySQL有两种常用的引擎类型MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束. * 本表的列必须与外键类型相同, 外键必须是外表的唯一键(或主键). * 设置外建 ...
- MySQL存储引擎--------Federated最佳实战
1. 背景 * 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. * 有点类似Oracle中的数据库链接(DBLINK). 要允许这个存储引擎, ...
- MySQL 5.6--------SSL连接最佳实战
1. 背景 * 在生产环境下,安全总是无法忽视的问题,数据库安全则是重中之重,因为所有的数据都存放在数据库中 * 当使用非加密方式连接MySQL数据库时,在网络中传输的所有信息都是明文的,可以被网络中 ...
- mysql 5.6 使用ssl_MySQL 5.6--------SSL连接最佳实战
MySQL 5.6--------SSL连接最佳实战 https://blog.csdn.net/weixin_33670786/article/details/89776706 mysql -uro ...
- MySQL DDL--MySQL 5.7版本Online DDL操作
主键索引维护 1.新增主键索引 ## 可以使用ALGORITHM=INPLACE+LOCK=NONE方式,操作期间允许读写. ALTER TABLE tb001 ADD PRIMARY KEY (ID ...
- mysql ddl dql_MySQL的DDL和DML及其DQL数据库操作
数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓库. 3. 数据库的特点: 1. 持久化存储数据的.其实数据库就是一个文件系 ...
- mysql 5.7 ddl 原子_mysql 8 新特性二DDL操作的原子化
MySQL 8.0支持原子数据定义语言(DDL)语句.这个特性被称为原子DDL.原子DDL语句将数据字典更新.存储引擎操作和与DDL操作相关联的二进制日志写入组合成单个原子操作.即使服务器在操作过程中 ...
- mysql ddl 进度_MySQL5.7 慢查询+DDL操作堵塞查询
数据库版本: mysql> select @@version; +------------+ | @@version | +------------+ | 5.7.26-log | +----- ...
最新文章
- 存储组和数据库的区别?
- Java线程的生命周期及线程的几种状态
- Win7如何设置多个IP地址
- C# winform 窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试...
- 为什么要破坏JVM的双亲委派模型
- input file设置默认值_innodb_data_file_path设置--通过错误日志中page大小计算实际值...
- SQL Server 2005 分页SQL
- BIM族库下载——Revit人物族
- ubuntu16.04 gnome环境,怎么样下载使用monaco字体
- matlab层模型弹塑性分析,matlab弹塑性时程分析法编程
- Typora 免费Beta版本(Window+Mac+Linux),所见即所得,完美支持markdown的富文本格式,实时渲染可见及编辑的特点
- 网站服务器备案有什么危害,域名备案对服务器有影响吗
- 怎么可以修改pr基本图形中的文字_10、Pr中基本图形安装使用,点点就可以应用高级的字幕...
- 编译原理实验:自上而下语法分析
- command: robot --argumentfile
- CSS实现两端对齐(及原理)
- 统计学习:模型评估与选择--留出法(python实现)
- 如何搭建Rtmp服务结合uni-app开发直播APP
- Mark Text使用说明
- wetool个人版_wetool自动接受新好友wetool使用教程-网站
热门文章
- |NOIOJ|动态规划|8462:大盗阿福
- 程序-进程-线程 ( 多线程 )
- Oracle - TRUNC, ROUND, CEIL, FLOOR
- 华硕笔记本的U盘启动
- Android SQLite编程详解
- 【Data guard】Switchover切换
- 中小型公司***的配置及NAT应用案例
- 防火墙(ASA)高级配置之URL过滤、日志管理、透明模式
- 使用bat脚本添加JAVA_HOME和修改PATH
- 【转】关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题