《MySQL由浅至深》PPT课件.ppt_第1页
《MySQL由浅至深》PPT课件.ppt_第2页
《MySQL由浅至深》PPT课件.ppt_第3页
《MySQL由浅至深》PPT课件.ppt_第4页
《MySQL由浅至深》PPT课件.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,MySQL教程,高级2第7章,如果你想做最好的,或者不做!2020/8/7,MySQL视图,ALTER VIEW语法CREATE VIEW语法DROP VIEW语法SHOW CREATE VIEW语法,它在MySQL服务器版本5.1中提供了视图功能(包括可更新视图)。本章讨论以下主题:使用CREATE VIEW或ALTER VIEW创建或更改视图。使用DROP VIEW销毁视图。使用SHOW CREATE VIEW显示视图元数据。2020年8月7日,MySQL-createview语法,Create OR REPLACE算法=undefined | merge | template view

2、 view _ name(column _ list)as select _ statement with cascaded | local check选项此语句可以创建一个新视图,如果给定了OR REPLACE子句,它还可以替换现有视图。Select语句是一个select语句,它给出了视图的定义。该语句可以从基表或其他视图中选择。此语句要求对视图拥有CREATE VIEW权限,并对select语句选择的每一列拥有一些权限。SELECT语句中其他地方使用的列必须具有SELECT权限。如果有OR REPLACE子句,您必须对该视图拥有DROP权限。2020年8月7日,MySQL创建了一个视图,它

3、属于数据库。默认情况下,在当前数据库中创建新视图。要在给定的数据库中显式创建视图,名称应该指定为db_name.view_name。mysql创建视图测试。表和视图在数据库中共享相同的命名空间,因此数据库不能包含同名的表和视图。视图必须有唯一的列名,并且不能重复,就像基表一样。默认情况下,由SELECT语句检索的列名用作视图列名。要为视图列定义显式名称,请使用可选的column_list子句列出用逗号分隔的id。column_list中的名称数必须等于SELECT语句检索的列数。SELECT语句检索的列可以是对表列的简单引用。它也可以是使用函数、常数值、运算符等的表达式。SELECT语句中的非

4、限定表或视图将根据默认数据库进行解释。通过用适当的数据库名称限定表或视图名称,视图可以引用表或其他数据库中的视图。多种SELECT语句可用于创建视图。视图可以引用基表或其他视图。它可以使用union、UNION和子查询。选择甚至不需要引用任何表。在以下示例中,定义了从另一个表中选择两列的视图,并给出了根据这些列计算的表达式:MySQl create table(qty int,price int);mysql插入测试值(3,50);mysql创建视图v AS选择数量、价格、数量*价格AS值从t;MySQL SELECT * FROM v;2020年8月7日,MySQL视图的定义,视图定义受以下

5、限制:SELECT语句不能在FROM子句中包含子查询。SELECT语句不能引用系统或用户变量。SELECT语句不能引用预处理语句参数。在存储的子程序中,定义不能被引用的子程序参数或局部变量。定义中引用的表或视图必须存在。但是,创建视图后,定义引用的表或视图可以被丢弃。要检查此类问题的视图定义,请使用CHECK TABLE语句。定义中不能引用临时表,也不能创建临时视图。视图定义中命名的表必须已经存在。您不能将触发器与视图相关联。2020/8/7,MySQL-WITH CHECK OPTION,对于可更新的视图,可以使用WITH CHECK OPTION子句来防止插入或更新行,除非select _

6、语句中对行起作用的WHERE子句为真。在关于可更新视图的WITH CHECK OPTION子句中,当视图根据另一个视图定义时,LOCAL和CASCADED关键字决定了检查测试的范围。LOCAL关键字将检查选项限制为仅在已定义的视图上工作。级联将检查要评估的基表。如果没有给定关键字,默认值为级联。请考虑以下表和视图集的定义:MySQL CREATE TABLE t1(a INT);mysql创建视图v1作为选择*从t1开始,其中创建视图v2作为选择*从v1开始,其中a0带有本地检查选项;mysql创建视图v3 AS SELECT * FROM v1,其中a0带有级联检查选项;注意:这里,视图v2

7、和v3是根据另一个视图v1定义的。V2有本地检查选项,所以只有插件将被测试v2检查。V3有级联检查选项,所以它不仅会测试自己的检查,还会测试基本视图的检查。在下面的语句中,介绍了这些差异:mysql INSERT INTO v3值(2);错误1369 (hy000) :检查选项未通过测试。v3,2020年8月7日,MySQl-本地和级联,其中视图v2和v3是根据另一个视图v1定义的。V2有本地检查选项,所以只有插件将被测试v2检查。V3有级联检查选项,所以它不仅会测试自己的检查,还会测试基本视图的检查。在下面的语句中,介绍了这些差异:mysql INSERT INTO v3值(3);错误136

8、9 (hy000) :检查选项未通过测试,v3,注意:可更新视图的with限制可能会影响可更新系统变量。2020年8月7日,MySQL-alter view语法,alter algorithm=undefined | merge | template view _ name(column _ list)as select _ statement with cascaded | local check选项此语句用于更改现有视图的定义。它的语法类似于创建视图。mysql将视图v3更改为选择*从t1开始,其中a 1带有本地检查选项;注意:CREATE VIEW和DROP权限还要求对SELECT语句中

9、引用的每一列都有一些权限。2020年8月7日/8月7日,MySQL视图相关性,一些视图是可更新的。也就是说,它们可以在诸如UPDATE、DELETE或INSERT这样的语句中用来更新基表的内容。对于可更新视图,视图中的行和基表中的行之间必须存在一对一的关系。还有其他特定的结构,使得视图不可更新。更具体地说,如果视图包含以下任何结构,则它是不可更新的:聚合函数(求和)、最小、最大、计数等。)。UNION HAVING UNION或UNION ALL的DISTINCT GROUP位于选择列表的联接从子句的子查询中,不可更新视图的WHERE子句中的子查询引用从子句中的表。mysql将视图v3更改为从

10、t1开始的选择计数(*),其中a 1带有本地检查选项;错误1368 (hy000) :不可更新视图测试上的检查选项。v3,2020/8/7,MySQL-dropview语法,如果存在dropview,则为view _ name,view _ name.restricted | cascade dropview可以删除一个或多个视图。您必须对每个视图拥有DROP权限。您可以使用关键字IF EXISTS来防止由不存在的视图引起的错误。给定这个子句,将为每个不存在的视图生成一个注释。2020年8月7日/2020年8月7日,MySQL- SHOW CREATE VIEW语法,SHOW CREATE V

11、IEW _ name此语句给出了一个创建视图的CREATE VIEw语句。MySQL SHow CREATE VIEw v;mysql SHOW CREATE VIEW vG,2020/8/7,MySQL分区,分区类型分区管理,2020/8/7,MySQL分区概述,使用的SQL语言独立于图表、表格、行或列下的任何数据结构或介质。然而,大多数高级数据库管理系统已经开发了一些方法来根据文件系统、硬件或两者来确定用于存储特定数据块的物理位置。在MySQL中,InnoDB存储引擎长期以来一直支持表空间的概念。分区通过允许单个表的多个部分根据可以设置为任意大小的规则分布在文件系统中,将这一概念向前推进了

12、一步。事实上,表的不同部分作为单独的表存储在不同的位置。用户选择的实现数据划分的规则称为划分函数,它可以是MySQL中的模,也可以是简单的匹配一个连续的数值区间或数值列表,或者是一个内部HASH函数或一个线性HASH函数。该函数根据用户指定的分区类型进行选择,并将用户提供的表达式的值作为参数。表达式可以是整数列值,也可以是作用于一个或多个列值并返回整数的函数。此表达式的值被传递给分区函数,该函数返回一个序列号,指示特定记录应该保存在哪个分区中。该函数不能是常数或任意数。它不能包含任何查询,但它实际上可以使用MySQL中可用的任何SQL表达式,只要它返回一个小于MAXVALUE(最大可能正整数)

13、的正值。您可以通过使用SHOW VARIABLES命令来确定MySQL是否支持分区,例如:MySQL show variables像% partition%一样;2020/8/7,MySQL- PARTITION,要为分区表配置特殊的存储引擎,您必须并且只能使用存储引擎选项,就像为非分区表配置存储引擎一样。但是,必须记住,必须在CREATE TABLE语句中使用的任何其他分区选项之前列出STORAGE(和其他表选项)。以下示例显示了如何创建一个表,该表被hash分成6个分区,并使用InnoDB存储引擎:MySQL创建表T2 (id int,amount decimal (7,2),tr _ d

14、ate)引擎=innodb分区被HASH(月(tr _ date)6个分区;注意:分区适用于表的所有数据和索引;您不能只分区数据而不分区索引,反之亦然,并且您不能只分区表的一部分。2020/8/7,MySQL分区的优点,分区的一些优点包括:它可以存储比单个磁盘或文件系统分区更多的数据。对于那些已经失去保存意义的数据,通常很容易通过删除与这些数据相关的分区来删除这些数据。相反,在某些情况下,添加新数据的过程可以通过为这些新数据添加新分区来轻松实现。通常与分区相关的其他优势包括以下所列。MySQL分区中的这些功能还没有实现,但是它们在我们的优先级列表中有很高的优先级;我们希望在5.1的生产版本中包

15、含这些功能。有些查询可以得到极大的优化,主要是因为满足给定WHERE语句的数据只能存储在一个或多个分区中,所以在搜索时不需要找到其他剩余的分区。因为可以在创建分区表后修改分区,所以在首次配置分区方案时,可以重新组织数据以提高常见查询的效率。涉及SUM()和COUNT()等聚合函数的查询可以很容易地并行处理。该查询的一个简单示例是“选择销售人员标识,按销售人员标识从销售组中将(订单)计数为订单总额”。通过“并行”,这意味着查询可以同时在每个分区上执行,并且最终结果只需要通过汇总所有分区的结果来获得。通过将数据查询分布在多个磁盘上,我们可以获得更大的查询吞吐量。2020年8月7日/2020年8月7日,MySQL分区类型,RANGE分区:基于给定连续间隔的列值,将多行分配给该分区。列表分区:类似于按范围分区,区别在于列表分区是根据列值与离散值集中的值的匹配来选择的。HASH partition:根据用户定义表达式的返回值选择的分区,它是使用要插入到表中的这些行的列值来计算的。这个函数可以包含任何在MySQL中有效的表达式,并产生一个非负整数值。密钥分区:与哈希分区相似,不同之处在于密钥分区只支持计算一列或多列,MySQL服务器提供自己的哈希函数。一列或多列必须包含整数值。注意:无论使用什么类型的分区,当从0开始创建和记录分区时,分区总是自动按顺序编号。记住这一点非常重

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论