MySQL基础(8)——视图、存储过程
来源:互联网 发布:谜画之塔mac版 编辑:程序博客网 时间:2024/06/10 23:23
本文主要整理什么是视图、存储过程、它们怎样工作,以及何时使用它们。
MySQL5及以上版本才支持视图、存储过程
一、视图
视图:视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。它仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。 在添加或更改这些表中的数据时,视图将返回改变过的数据。
视图的常见应用:
(1). 重用SQL语句。
(2). 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
(3). 使用表的组成部分而不是整个表。
(4). 保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
(5). 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。视图的使用:
关键词:CREATE VIEW、SHOW CREATE VIEW viewname、DROP
在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据
——导致性能问题:因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果你用多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降得很厉害。因此,在部署使用了大量视图的应用前,应该进行测试。
视图创建和使用的一些最常见的规则和限制:
(1)视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
(2) 对于可以创建的视图数目没有限制。
(3)为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
(4)视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造 一个视图。
(5)ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。
(6)视图不能索引,也不能有关联的触发器或默认值。
(7)视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。
实例1:利用视图简化复杂的联结
检索订购了产品TNT2的客户,可用如下表示(与前几篇中相同例子的处理进行比较):
创建不受特定数据限制的视图是一种好办法。例如,上面创建的视图返回生产所有产品的客户而不仅仅是生产TNT2的客户。扩展视图的范围不仅使得它能被重用,而且甚至更有用。这样做不需要创建和维护多个类似视图。
实例2:重新格式化检索出的数据
实例3:用视图过滤掉不想要的数据
如果从视图检索数据时使用了一条 WHERE子句,则两组子句(一组在视图中,另一组是传递给视图的)将自动组合。
实例4:使用视图与计算字段
3.视图的更新
对视图使用INSERT、UPDATE和 DELETE实现更新。更新一个视图将更新其基表。如果你对视图增加或删除行,实际上是对其基表增加或删除行。
不能更新视图的情况(即MySQL不能正确地确定被更新的基数据的情况):
1. 分组(使用GROUP BY和HAVING);
2. 联结;
3. 子查询;
4. 并;
5. 聚集函数(Min()、Count()、Sum()等);
6. DISTINCT;
7. 导出(计算)列。
一般,应该将视图用于检索(SELECT语句) 而不用于更新(INSERT、UPDATE和DELETE)。
二、存储过程
存储过程:为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,但它们的作用不仅限于批处理。
存储过程的意义: 简单、安全、高效
(1). 通过把处理封装在容易使用的单元中,简化复杂的操作。
(2). 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能 性就越大。防止错误保证了数据的一致性。
(3). 简化对变动的管理。如果表名、列名或业务逻辑(或别的内容) 有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。——保证安全性(通过存储过程限制对基础数据的访问减少了数据讹误(无意识的或别的原因所导致的数据讹误)的机会。)
(4). 提高性能。因为使用存储过程比使用单独的SQL语句要快。
(5). 存在一些只能用在单个请求中的MySQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码。存储过程的缺陷:
(1). 一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。
(2). 你可能没有创建存储过程的安全访问权限。许多数据库管理员限制存储过程的创建权限,允许用户使用存储过程,但不允许他们创建存储过程。存储过程的使用
关键词:CALL;CREATE PROCEDURE
实例1:创建一个返回产品平均价格的存储过程
对于mysql命令行实用程序: 默认的MySQL语句分隔符为;mysql命令行实用程序也使用;作为语句分隔符。如果命令行实用程序要解释存储过程自身内的;字符,则它们最终不会成为存储过程的成分,这会使存储过程中的SQL出现句法错误。解决办法是临时更改命令行实用程序的语句分隔符,如实例1所示。其中,DELIMITER //告诉命令行实用程序使用//作为新的语句结束分隔符,可以看到标志存储过程结束的END定义为END //而不是END;。这样,存储过程体内的;仍然保持不动,并且正确地传递给数据库引擎。最后,为恢复为原来的语句分隔符,可使用DELIMITER ;。
除\符号外,任何字符都可以用作语句分隔符。
实例2:使用存储过程
实例3:删除存储过程
为使过程不存在时不至于产生错误,可使用DROP PROCEDURE IF EXISTS。
实例4:使用参数的存储过程
所有MySQL变量都必须以@开始。
实例5:得到订单合计,并对合计增加营业税,不过只针对某些顾客。(智能存储过程)
参数taxable是一个布尔值(如果要增加税则为真,否则为假)。在存储过程体中,用DECLARE语句定义了两个局部变量。DECLARE要求指定变量名和数据类型,它也支持可选的默认值(这个例子中的taxrate的默认被设置为6%)。IF语句检查taxable是否为真,如果为真,则用另 一SELECT语句增加营业税到局部变量total。最后,用另一SELECT语句将 total(它增加或许不增加营业税)保存到ototal。
实例6:检查存储过程
SHOW PROCEDURE STATUS列出所有存储过程,可用LIKE指定一个过滤模式,来限制其输出。
- MySQL基础(8)——视图、存储过程
- MySql—视图、函数、存储过程、触发器
- MYSQL-基础—存储过程
- MYSQL:基础—存储过程
- MySql高级—视图、函数、存储过程、触发器
- MySql高级—视图、函数、存储过程、触发器
- mysql备份还原(视图、存储过程)
- mysql备份还原(视图、存储过程)
- mysql备份还原(视图、存储过程)
- mysql备份还原(视图、存储过程)
- mysql备份还原(视图、存储过程)
- mysql备份还原(视图、存储过程)
- mysql备份还原(视图、存储过程)
- mysql 入门基础(5)—存储过程和游标
- MYSQL基础(视图、索引、存储过程与函数、流程控制语句)
- Mysql视图和存储过程
- MySQL存储过程与视图
- mysql 视图,触发器,存储过程
- 【Dockerfile】CentOS6.x中Docker通过Dockerfile构建常用的基础环境 # 设置基本的镜像,后续命令都以这个镜像为基础 FROM centos # 作者信息 MAI
- RePlugun趟坑记(2)
- 运维小白的python之路——异常、进程与线程
- MySQL 50条必练查询语句
- 模板测试练习 选中效果
- MySQL基础(8)——视图、存储过程
- 红帽linux虚拟机下挂载U盘
- 打印菱形图案 / 猴子吃桃问题
- 对于所有对象都通用的方法
- 用lex分析C源码中数据结构关系拓扑图
- 【最爱高傲感伤的英文歌曲之王《Aplogize》 ——《对不起》】
- Android Runtime运行linux命令
- 渲染到纹理
- Python中多线程的阻塞问题