MySQL6:视图

什么是视图

数据库中的视图是一个虚拟表。视图是从一个或者多个表中导出的表,视图的行为与表非常相似,在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录。视图可以使用户操作方便,而且可以保障数据库系统安全。

视图一经定义便存储在数据库中,预期相对应的数据并没有像表那样在数据库中再存储 一份,通过视图看到的数据只是存放在基本表中的数据。当对通过视图看到的数据进行修改时,相应的基本表中的数据也要发生变化;同时,若基本表的数据发生变 化,那么这种变化也自动地反映到视图中。

下面创建两个表:

CREATE TABLE teacher
(
    teacherId INT,
    teacherName    VARCHAR(40)
);

CREATE TABLE teacherinfo
(
    teacherId INT,
    teacherAddr VARCHAR(40),
    teacherPhone    VARCHAR(20)
);

创建视图

创建视图使用CREATE VIEW语法,基本语法格式如下:

CREATE[OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCASDED | LOCAL] CHECK OPTION]

解释一下:

1、CREATE表示创建新视图。REPLACE表示替换已经创建的视图

2、ALGORITHM表示视图选择的算法,UNDEFINED表示MySQL自动选择算法,MERGE表示将使用的视图语句与视图定义合并起来,TEMPTABLE表示将视图的结果存入临时表,然后用临时表来执行语句

3、view表示视图的名称

4、column_list为属性列

5、SELECT_statement表示SELECT语句

6、CASCADED与LOCAL为可选参数,CASCADED为默认值,表示更新视图时要满足所有相关视图和表的条件;LOCAL则表示更新视图时满足该视图本身定义即可

该语句要求具有针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限,如果还有 OR REPLACE子句,必须在仕途上具有DROP权限。另外,视图属于数据库,在默认情况下,将在当前数据库创建新的视图,如果想在给定数据库中明确创建视 图,创建时应将名称指定为db_name.view_name。

1、在单表上创建视图

比方说teacherinfo这张表我只需要teacherId和teacherPhone两个字段,那么:

CREATE VIEW view_teacherinfo(view_teacherId, view_teacherPhone)
 AS SELECT teacherId, teacherPhone from teacherinfo;

因为默认创建视图的字段和原表的字段是一样的,我这里指定视图的字段名称了。我现在往view_teacherinfo里面插入两个字段:

insert into view_teacherinfo values(‘111‘, ‘222‘);
commit;

看一下视图view_teacherinfo和原表teacherinfo:

说明视图中的字段发生变化,原表中的字段也发生了变化,证明了前面的结论,反之也是。

2、在多表上创建视图

比方说我现在需要teacherId、teacherName、teacherPhone三个字段了,可以这么创建视图:

CREATE VIEW view_teacherunion(view_teacherId, view_teacherName, view_teacherPhone)
AS SELECT teacher.teacherId, teacher.teacherName, teacherinfo.teacherPhone
FROM teacher, teacherinfo WHERE teacher.teacherId = teacherinfo.teacherId;

很简单,只是把表连一下而已

使用视图的作用

上面创建了视图了,看到与直接从数据表中读取相比,视图有以下优点:

1、简单化

看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化它们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件

2、安全性

通过视图,用户只能查询和修改他们所能看见的数据,数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定列上。通过视图,用户可以被限制在数据的不同子集上:

(1)使用权限可被限制在基表的行的子集上

(2)使用权限可被限制在基表的列的子集上

(3)使用权限可被限制在基表的行和列的子集上

(4)使用权限可被限制在多个基表的连接所限定的行上

(5)使用权限可被限制在基表的数据的统计汇总上

(6)使用权限可被限制在另一个视图的一个子集上,或是一些视图和基表合并后的子集上

3、逻辑数据独立性

视图可以帮助用户屏蔽真实表结果变化带来的影响

查看、修改、删除视图

1、DESCRIBE查看视图基本信息

DESCRIBE语句查看视图基本信息的语法为:

DESCRIBE 视图名;

比如:

DESCRIBE view_teacherinfo

结果为:

结果显示出来视图的字段定义、字段的数据类型、是否为空、是否为主/外键、默认值和额外信息。上面的命令,写成DESC也行

2、SHOW TABLE STATUS查看视图信息

SHOW TABLE STATUS也可以用来查看视图信息,基本语法为:

SHOW TABLE STATUS LIKE ‘视图名‘

比如:

SHOW TABLE STATUS LIKE ‘view_teacherinfo‘

结果为:

后面还有些字段就不列出来了

3、SHOW CREATE VIEW查看视图信息

SHOW CREATE VIEW也可以用来查看视图信息,基本语法为:

SHOW CREATE VIEW 视图名;

比如:

SHOW CREATE VIEW view_teacherinfo;

运行结果为:

没有列完整,不过可以看到Create View字段把创建视图的语法给列出来了

4、修改视图

修改视图,就不细说了,因为修改视图的语法和创建视图的语法是完全一样的。当视图已经存在时,修改语句可以对视图进行修改;当视图不存在时,创建视图

5、删除视图

当视图不再需要时,可以删除视图,删除一个或者多个视图可以使用DROP VIEW语句,基本语法为:

DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]

其中,view_name是要删除的视图名称,可以添加多个需要删除的视图名称,名称和名称之间使用逗号分隔开,删除视图必须拥有DROP权限。比如:

DROP VIEW IF EXISTS view_teacherinfo, view_teacherunion;

看到,这样就把view_teacherinfo和view_teacherunion两个视图删除了,因为加了IF EXISTS,所以即使删除视图出错了(比方说视图名字写错了),MySQL也不会提示错误,大不了没东西删除罢了

MySQL中视图和表的区别

最后总结一下MySQL中视图和表的区别:

1、视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是

2、视图没有实际的物理记录,而基本表有

3、表是内容,视图是窗口

4、表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能用创建的语句来修改

5、视图是查看数据表的一种方法,可以查询数据表中的某些字段构成的数据,只是一些SQL语句的集合。从安全的角度讲,视图可以防止用户接触数据表,因而用户不知道表结构

6、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表

7、视图的建立和删除只影响视图本身,不影响对应的基本表

时间: 2024-10-29 19:06:16

MySQL6:视图的相关文章

Django Book

The Django Book 2.0--中文版 第一章:介绍Django 本书所讲的是Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 从好的方面来看,Web 开发激动人心且富于创造性:从另一面来看,它却是份繁琐而令人生厌的工作. 通过减少重复的代码,Django 使你能够专注于 Web 应用上有 趣的关键性的东西. 为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

Android零基础入门第61节:滚动视图ScrollView

原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期继续来学习常见的其他组件. 一.ScrollView概述 从前面的学习有的同学可能已经发现,当拥有很多内容时屏幕显示不完,显示不全的部分完全看不见.但是在实际项目里面,很多内容都不止一个屏幕宽度或高度,那怎么办呢?那就需要本节学习的ScrollView来完成. 在默认情况下,ScrollView只是

Android零基础入门第60节:日历视图CalendarView和定时器Chronometer

原文:Android零基础入门第60节:日历视图CalendarView和定时器Chronometer 上一期学习了AnalogClock.DigitalClock和TextClock时钟组件,本期继续来学习日历视图CalendarView和定时器Chronometer. 一.CalendarView 日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触 摸来滚动日历.如果希望监控该组件的日期改变,则可调用CalendarView的 setOnDateCha

手动创建CView视图

通过VC2010向导创建一个标准的MFC单文档框架,去掉文档/视图结构支持.然后,在资源中插入一个FormView窗口,在MainFrame的Create中创建并显示此视图窗口. CView *pView = (CMainView *)(RUNTIME_CLASS(CMainView)->CreateObject());   if(!pView)   {       MessageBox(_T("创建视图不成功!"));       return 0;   }      CRec

《spring boot》8.2章学习时无法正常启动,报“ORA-00942: 表或视图不存在 ”

在学习<spring boot>一书的过程中,由于原书作者难免有一些遗漏的的地方,或者系统.软件版本不一致.框架更新等各种因素,完全安装书中源码页不能实现项目的正常启动 在8.2章节,演示JPA对oracle的支持时,配置文件中设置了如下代码,正常情况下应该支持数据库自动创建序列和表,但实际启动时却报错"ORA-00942: 表或视图不存在 " spring.datasource.driverClassName=oracle.jdbc.OracleDriver spring

视图框架:Spring MVC 4.0(1)

目录 一.表单标签库 1.1.简介 1.2.常用属性 1.3.form标签与input标签 1.4.checkbox标签 1.5.radiobutton标签 1.6.password标签 1.7.select标签 1.8.option标签 1.9.options标签 1.10.textarea.errors标签 1.11.hidden标签 1.12.radiobuttons 单选列表与checkboxs复选列表 二.视图解析器 2.1.ViewResolver视图解析器 2.2.链式视图解析器

Atitit 数据库view视图使用推荐规范与最佳实践与方法

1. 视图的优点:1 1.1. **提升可读性  定制用户数据,聚焦特定的数据1 1.2. 使用视图,可以简化数据操作.       1 1.3. **提升扩展性 屏蔽底层表的重构变动,免编译免部署热更新2 1.4. B.查询简单化. 2 1.5. C.逻辑数据独立性. 2 1.6. 提高数据安全性,可以不让用户看到表中的某个字段.2 1.7. 合并分离的数据,创建分区视图       2 1.8. 模拟索引列3 2. 缺点3 2.1. 小部分场景下,复杂视图可能会有性能问题,可以使用带参数的s

MySQL系列:视图基本操作

1. 视图简介 1.1 视图定义 视图是一种虚拟的表,是从数据库中一个或多个表中导出来的表. 视图可以从已存在的视图的基础上定义. 数据库中只存放视图的定义,并没有存放视图中的数据,数据存放在原来的表中. 视图中的数据依赖于原来的表中的数据,表中的数据发生变化,显示在视图中的数据也会改变. 1.2 视图作用 (1)增加数据安全性 通过视图,用户只能查询和修改指定的数据. 数据库授权命令可以限制用户的操作权限,但不能限制到特定行和列上.使用视图可以将用户的权限限制到特定的行和列上. (2)提高表的