MySQL由浅至深(七).ppt
《MySQL由浅至深(七).ppt》由会员分享,可在线阅读,更多相关《MySQL由浅至深(七).ppt(25页珍藏版)》请在三一办公上搜索。
1、,MySQL课程,高级2第七章,要做就做最好,要不就不做!,2023/6/28,MySQL视图,ALTER VIEW语法 CREATE VIEW语法 DROP VIEW语法 SHOW CREATE VIEW语法,在5.1版MySQL服务器中提供了视图功能(包括可更新视图)。本章讨论了下述主题:使用CREATE VIEW或ALTER VIEW创建或更改视图。使用DROP VIEW销毁视图。使用SHOW CREATE VIEW显示视图元数据。,2023/6/28,MySQL-CREATE VIEW语法,CREATE OR REPLACE ALGORITHM=UNDEFINED|MERGE|TEMP
2、TABLE VIEW view_name(column_list)AS select_statement WITH CASCADED|LOCAL CHECK OPTION该语句能创建新的视图,如果给定了OR REPLACE子句,该语句还能替换已有的视图。select_statement是一种SELECT语句,它给出了视图的定义。该语句可从基表或其他视图进行选择。该语句要求具有针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。如果还有OR REPLACE子句,必须在视图上具有DROP权限。
3、,2023/6/28,MySQL创建视图,视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时,应将名称指定为db_name.view_name。mysql CREATE VIEW test.v AS SELECT*FROM t;表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。视图必须具有唯一的列名,不得有重复,就像基表那样。默认情况下,由SELECT语句检索的列名将用作视图列名。要想为视图列定义明确的名称,可使用可选的column_list子句,列出由逗号隔开的ID。column_list中的名称数目必须等于SELEC
4、T语句检索的列数。SELECT语句检索的列可以是对表列的简单引用。也可以是使用函数、常量值、操作符等的表达式。对于SELECT语句中不合格的表或视图,将根据默认的数据库进行解释。通过用恰当的数据库名称限定表或视图名,视图能够引用表或其他数据库中的视图。能够使用多种SELECT语句创建视图。视图能够引用基表或其他视图。它能使用联合、UNION和子查询。SELECT甚至不需引用任何表。在下面的示例中,定义了从另一表选择两列的视图,并给出了根据这些列计算的表达式:,mysql CREATE TABLE t(qty INT,price INT);mysql INSERT INTO t VALUES(3
5、,50);mysql CREATE VIEW v AS SELECT qty,price,qty*price AS value FROM t;mysql SELECT*FROM v;,2023/6/28,MySQL视图的定义,视图定义服从下述限制:SELECT语句不能包含FROM子句中的子查询。SELECT语句不能引用系统或用户变量。SELECT语句不能引用预处理语句参数。在存储子程序内,定义不能引用子程序参数或局部变量。在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句。在定义中不能引用TEMPO
6、RARY表,不能创建TEMPORARY视图。在视图定义中命名的表必须已存在。不能将触发程序与视图关联在一起。,2023/6/28,MySQL-WITH CHECK OPTION,对于可更新视图,可给定WITH CHECK OPTION子句来防止插入或更新行,除非作用在行上的select_statement中的WHERE子句为“真”。在关于可更新视图的WITH CHECK OPTION子句中,当视图是根据另一个视图定义的时,LOCAL和CASCADED关键字决定了检查测试的范围。LOCAL关键字对CHECK OPTION进行了限制,使其仅作用在定义的视图上,CASCADED会对将进行评估的基表进
7、行检查。如果未给定任一关键字,默认值为CASCADED。请考虑下述表和视图集合的定义:mysql CREATE TABLE t1(a INT);mysql CREATE VIEW v1 AS SELECT*FROM t1 WHERE a CREATE VIEW v2 AS SELECT*FROM v1 WHERE a0 WITH LOCAL CHECK OPTION;mysql CREATE VIEW v3 AS SELECT*FROM v1 WHERE a0 WITH CASCADED CHECK OPTION;,注:这里,视图v2和v3是根据另一视图v1定义的。v2具有LOCAL检查选项,
8、因此,仅会针对v2检查对插入项进行测试。v3具有CASCADED检查选项,因此,不仅会针对它自己的检查对插入项进行测试,也会针对基本视图的检查对插入项进行测试。在下面的语句中,介绍了这些差异:mysql INSERT INTO v2 VALUES(2);mysql INSERT INTO v3 VALUES(2);ERROR 1369(HY000):CHECK OPTION failed test.v3,2023/6/28,MySQL-LOCAL与CASCADED,这里,视图v2和v3是根据另一视图v1定义的。v2具有LOCAL检查选项,因此,仅会针对v2检查对插入项进行测试。v3具有CASC
9、ADED检查选项,因此,不仅会针对它自己的检查对插入项进行测试,也会针对基本视图的检查对插入项进行测试。在下面的语句中,介绍了这些差异:mysql INSERT INTO v2 VALUES(2);mysql INSERT INTO v3 VALUES(3);ERROR 1369(HY000):CHECK OPTION failed test.v3,注:视图的可更新性可能会受到系统变量updatable_views_with_limit的值的影响。,2023/6/28,MySQL-ALTER VIEW语法,ALTER ALGORITHM=UNDEFINED|MERGE|TEMPTABLE VI
10、EW view_name(column_list)AS select_statement WITH CASCADED|LOCAL CHECK OPTION 该语句用于更改已有视图的定义。其语法与CREATE VIEW类似。mysql alter view v3 as select*from t1 where a 1 with local check option;,注:CREATE VIEW和DROP权限,也需要针对SELECT语句中引用的每一列的某些权限。,2023/6/28,MySQL视图关联性,某些视图是可更新的。也就是说,可以在诸如UPDATE、DELETE或INSERT等语句中使用它
11、们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的:聚合函数(SUM(),MIN(),MAX(),COUNT()等)。DISTINCT GROUP BY HAVING UNION或UNION ALL 位于选择列表中的子查询Join FROM子句中的不可更新视图WHERE子句中的子查询,引用FROM子句中的表。mysql alter view v3 as select count(*)from t1 where a 1 with local
12、 check option;,ERROR 1368(HY000):CHECK OPTION on non-updatable view test.v3,2023/6/28,MySQL-DROP VIEW语法,DROP VIEW IF EXISTS view_name,view_name.RESTRICT|CASCADE DROP VIEW能够删除1个或多个视图。必须在每个视图上拥有DROP权限。可以使用关键字IF EXISTS来防止因不存在的视图而出错。给定了该子句时,将为每个不存在的视图生成NOTE。,2023/6/28,MySQL-SHOW CREATE VIEW语法,SHOW CREAT
13、E VIEW view_name 该语句给出了1个创建给定视图的CREATE VIEW语句。mysql SHOW CREATE VIEW v;mysql SHOW CREATE VIEW vG;,2023/6/28,MySQL分区,分区概述 分区类型分区管理,2023/6/28,MySQL分区概述,SQL语言的使用独立于它所使用的任何数据结构或图表、表、行或列下的介质。但是,大部分高级数据库管理系统已经开发了一些根据文件系统、硬件或者这两者来确定将要用于存储特定数据块物理位置的方法。在MySQL中,InnoDB存储引擎长期支持表空间的概念。分区又把这个概念推进了一步,它允许根据可以设置为任意大
14、小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为单独的表。用户所选择的、实现数据分割的规则被称为分区函数,这在MySQL中它可以是模数,或者是简单的匹配一个连续的数值区间或数值列表,或者是一个内部HASH函数,或一个线性HASH函数。函数根据用户指定的分区类型来选择,把用户提供的表达式的值作为参数。该表达式可以是一个整数列值,或一个作用在一个或多个列值上并返回一个整数的函数。这个表达式的值传递给分区函数,分区函数返回一个表示那个特定记录应该保存在哪个分区的序号。这个函数不能是常数,也不能是任意数。它不能包含任何查询,但是实际上可以使用MySQL 中任何可用的S
15、QL表达式,只要该表达式返回一个小于MAXVALUE(最大可能的正整数)的正数值。可以通过使用SHOW VARIABLES命令来确定MySQL是否支持分区,例如:mysql SHOW VARIABLES LIKE%partition%;,2023/6/28,MySQL-PARTITION,要为某个分区表配置一个专门的存储引擎,必须且只能使用STORAGE ENGINE 选项,这如同为非分区表配置存储引擎一样。但是,必须记住STORAGE ENGINE(和其他的表选项)必须列在用在CREATE TABLE语句中的其他任何分区选项之前。下面的例子给出了怎样创建一个通过HASH分成6个分区、使用In
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 至深
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5347536.html