数据库教程之MySQL视图的学习
当前位置:以往代写 > 数据库教程 >数据库教程之MySQL视图的学习
2019-06-14

数据库教程之MySQL视图的学习

数据库教程之MySQL视图的学习

首先,课课家小编让大家来看下数据库的MySQL视图学习总结,什么是使用视图的原因是什么?下面数据库教程之MySQL视图。

数据库教程1.安全。通常做:创建一个视图,定义操作的数据库教程的视图。在用户权限和视图结合。这种方法是使用一个特征:GRANT语句可以在视图中授予的权限。

2.提高查询性能。

3.灵活性的功能要求,需要改变该表的结构,导致相对大的工作量。您可以使用虚拟表中的微小变化的形式来实现的成果。这是比较有用的实际发展。例如:如果因为某些种类的需要,一个表和b表需要合并在一起,形成一个新的表e。最后,一​​个表和b表将不存在。并且因为在该系列中的原始程序

写SQL是基于与B-表查询,这意味着需要重新编写大量的SQL(C表进入运营数据)的表。视图可以通过不修改来完成。的两个视图的定义是表a和b的原始名称。 A,B查看完整的删除内容从C表。

注意:使用此解决方案,基于所述视图中更详细的更好的细节知识。因为使用视图或使用​​表中的语法没有区别。例如,视图名称,然后查询“SELECT * FROM A”。

复杂的查询需要。这个问题可以分解,并创建多个视图获取数据。该视图可以得到的结果一起需要。

 

工作机制的观点:当你调用视图,该视图将执行SQL,获取数据操作。内容视图不存储,但只有当视图被引用来源的数据。这不占空间,因为它是直接参考,内容视图总是内容的真值表是一样的。查看这个设计的好处是什么?节省空间,内容始终是相同的,那么我们就不需要维护内容来看,保持良好的内容真实表,可以保证视图的完整性。

通过更新视图实现更新真实表

看到很多例子,更新视图可以更新真实表。原因,我是这样理解的:视图并没有保存内容。只是引用数据。那么,更新视图,其实就是以引用的方式操作了真实表with check option:对视图进行更新操作的时,需要检查更新后的值是否还是满足视图公式定义的条件。通俗点,就是所更新的结果是否还会在视图中存在。如果更新后的值不在视图范围内,就不允许更新如果创建视图的时候,没有加上with check option,更新视图中的某项数据的话,mysql并不会进行有效性检查。删掉了就删掉了。在视图中将看不到了。

使用有效性检查,实际意义是什么?

 

数据库教程视图的实践:重新组织表的需求
CREATE TABLE `result` (`MATH_NO` INT(10) NOT NULL unsigned AUTO_INCREMENT PRIMARY KEY,
`TEAMNO` INT(10) NOT NULL,
`PLAYERNO` INT(10) NOT NULL,
`WON` VARCHAR(10) NOT NULL,
`LOST` VARCAHR(10) NOT NULL,
`CAPTAIN` INT(10) NOT NULL COMMIT ‘就是PLAYERNO的另外名字’,
`DIVISION` VARCHAR(10) NOT NULL
) ENGINE=MYISAM DEFAULT CHARSET=utf8 COMMIT=’重新组的新表’ AUTO_INCREMENT=1

针对每个表创建一个视图,将数据保存进去:
CREATE VIEW teams(TEAMNO,PLAYERNO,DIVISION) AS SELECT DISTINCT TEAMNO,CAPTAIN,DIVISION FROM result

报错:#1050 – Table ‘teams’ already exists

说明,因为视图也是一种表,是虚拟表。不能与已有的表(视图)出现重名

接下来,删掉表teams,再执行创建视图的代码。

将视图看成与表一样的东西,更加容易理解使用规则。下面这样对比也许使自己更好理解:

1.在使用视图的时候,就是与使用表的语法一样的。
2.创建视图的时候,该视图的名字如果与已经存在表重名的话,那么会报错,不允许创建。视图就是一种特殊的表

3.创建视图的时候,可以这样使用CREATE VIEW teams(TEAMNO,PLAYERNO,DIVISION),可以定义视图表的结构。
4.在phpmyadmin中。左边的表列表中将视图与表列在了一起。只有通过右侧的状态”View:teams”可以知道该表是视图表。

 

视图在mysql中的内部管理机制:

视图的记录都保存在information_schema数据库中的一个叫views的表中。具体某个视图的定义代码以及属于哪个数据库等信息可以从里面看到理解视图的两种工作机制:

语句:select * from teams

针对上面语句,总结几个知识点
1.确认是视图的过程:teams也可以是表名。由于表与视图的物理机制不同。视图本身是不存储内容的。所以,在使用sql的时候,mysql是怎么知道teams是一个视图还是表。是因为有一个查看目录的例程在做这件事。

2.数据库教程mysql对处理视图的两种方法:替代方式和具体化方式。替换方式理解,视图名直接使用视图的公式替换掉了。针对上面视图teams,mysql会使用该视图的公式进行替换,视图公式合并到了select中。结果就是变成了如下sql语句:

select * from (SELECT DISTINCT TEAMNO,CAPTAIN,DIVISION FROM result)。也就是最后提交给mysql处理该sql语句。推荐学习数据库教程视频:站长聚集地_mysq教程

#p#分页标题#e#

具体化方式理解,数据库学习的mysql先得到了视图执行的结果,该结果形成一个中间结果暂时存在内存中。之后,外面的select语句就调用了这些中间结果(临时表)。

看起来都是要得到结果,形式上有区别,好像没体会到本质上的区别。两种方式又有什么样的不同呢?

替换方式,将视图公式替换后,当成一个整体sql进行处理了。具体化方式,先处理视图结果,后处理外面的查询需求。
替换方式可以总结为,先准备,后执行。
具体化方式总结理解为,分开处理。

哪种方式好?不知道。mysql会自己确定使用哪种方式进行处理的。自己在定义视图的时候也可以指定使用何种方式。像这样使用:

CREATE ALGORITHM=merge VIEW teams as SELECT DISTINCT TEAMNO,CAPTAIN,DIVISION FROM result ALGORITHM有三个参数分别是:merge、TEMPTABLE、UNDEFINED

看看数据库教程的MySQL手册中提到替换为自己的合适的地方的具体方式,可以理解:临时表,因为数据不能被更新。所以,如果你正在使用的参数不是Temptable,它不能被更新。当你定义的参数为undefined(没有定义算法参数)。 MySQL的并购喜欢。因为它是更有效的。更多详情可登陆课课家网络教学平台进行学习观看!

    关键字:

在线提交作业