MySql视图学习.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MySql视图学习

MySql视图学习 一、使用视图的理由是什么? 1.安全性。一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定。这样的方式是使用到 了一个特性:grant语句可以针对视图进行授予权限。 2.查询性能提高。 3.有灵活性的功能需求后,需要改动表的结构而导致工作量比较大。那么可以使用虚拟表的形式达到少修改的效果。这是在 实际开发中比较有用的。 例子:假如因为某种需要,a表与b表需要进行合并起来组成一个新的表c。最后a表与b表都不会存在了。而由于原来程序中编 写sql分别是基于a表与b表查询的,这就意味着需要重新编写大量的sql(改成向c表去操作数据)。而通过视图就可以做到不修 改。定义两个视图名字还是原来的表名a和b。a、b视图完成从c表中取出内容。 说明:使用这样的解决方式,基于对视图的细节了解越详细越好。因为使用视图还是与使用表的语法上没区别。比如视图名a ,那么查询还是select * from a。 4.复杂的查询需求。可以进行问题分解,然后将创建多个视图获取数据。将视图联合起来就能得到需要的结果了。 视图的工作机制:当调用视图的时候,才会执行视图中的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是一个视

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档