mysql 视图的学习

来源:互联网 发布:中国最美的地方 知乎 编辑:程序博客网 时间:2024/05/22 09:36

一、视图的优点

  1. 安全性。
  2. 查询性能提高
  3. 有灵活性的功能需求后,需要改动表的结构而导致工作量比较大,而使用视图的形式就达到了少修改的效果(例如:假如因为某种需要a表和b表需要进行合并起来组成一个新的表c,而a、b表都不会存在了。那么原来程序中编写sql分别基于两表的查询就需要重新编写大量的sql【改成向c表去操作】。而通过视图就可以做到不修改。定义两个视图名字还是原来表a、b的名字。说明:使用这样的解决方式,基于对视图的细节了解越详细越好。因为使用视图还是与使用表的语法上没区别。)
  4. 复杂的查询需求。可以进行问题分解,然后将创建多个视图获取数据。将视图联合起来就能得到需要的结果了。

二、视图的工作机制:

        当调用视图的时候,才会执行视图中的sql,进行取数据操作。视图的内容没有存储,而是在视图被引用的时候才派生出数据。这样不会占用空间,由于是即时引用,视图的内容总是与真实表的内容一致的。这样设计节省空间,内容总是一致,不需要维护视图的内容,维护好真实的表的内容,就可以保证视图的完整性了。

三、视图的创建

       创建视图是在表的基础上创建的,可以理解为视图时表的镜像。

//创建视图的格式示例

DROP TABLE IF EXISTS `te_view`;
DROP VIEW IF EXISTS `te_view`;
CREATE TABLE `te_view` (
  `id` TINYINT(4),
  `name` VARCHAR(20),
  `pwd` VARCHAR(20),
  `addr` VARCHAR(255),
  `phone` VARCHAR(255)
) ;
DROP TABLE IF EXISTS `te_view`;
DROP VIEW IF EXISTS `te_view`;
CREATE ALGORITHM=UNDEFINED
DEFINER=`root`@`localhost` SQL SECURITY DEFINER
VIEW `te_view` AS SELECT `te1`.`id` AS `id`,`te1`.`name` AS `name`,`te1`.`pwd` AS `pwd`,`te2`.`addr` AS `addr`,`te2`.`phone` AS `phone` FROM (`te1` JOIN `te2` ON(`te1`.`id` = `te2`.`id`)) ;