Mysql简单入门教程

Mysql简单入门教程

4 (28人评价)
  • 课时:(22)

  • 学员:(1391)

  • 浏览:(67746)

  • 加入课程

第8课 视图的笔记

相关课时:
第8课 视图2015-05-18
笔记详情:

一、视图是一种虚拟的表。视图从数据库中的一个或多个表导出来的表。视图还有从已经存在的视图的基础上来定义。数据库中只存放了视图的定义,并没有存放视图中数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

二、视图是在原有的表或者视图的基础上重新定义的虚拟表,这可以从原有的表上选取对用户有用的信息。那些对用户没有用,或者用户没有权限了解的信息,都可以直接屏蔽掉。这样做即使应用简单化,也保证了系统的安全。视图起着类似筛选的作用。视图的作用归纳如下:

使操作简单化  增加数据的安全性 提高表的逻辑独立性

三、在单表创建视图的语法形式

CREATE [ALGORITHM={UNDEFINED/MERGE/TEMPTABLE}] VIEW 视图名 [(属性清单)] AS SELECT语句 [WITH[CASCADED/LOCAL] CHECK OPTION]; 

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

权限范围:WITH/CASCADED是可选参数,表示更新视图是要满足所有相关视图的表和条件,该参数为默认值。/LOCAL表示更新权限时要满足该视图本身的定义的条件即可。

e.g下面在department表上创建一个简单的视图,视图的名称为department_view1.代码如下:

CREATE VIEW department_view1 AS SELECT*FROM department;(*表示查询所有)

代码执行如下:

mysql>CREATE VIWE department_view1

 ->AS SELECT*FROM department;

Query OK,0 rows affected(0.03 sec)

四、在多表上创建视图

e.g在department表和worker表上创建一个名为worker_view1的视图。代码如下:

CREATE ALGORITHM=MERGE VIEW

worker_view1(name,department,sex,age,address)

AS SELECT name,department.d_name,sex,2009-birthday,address

FROM department,worker WHERE worker.d_id=department.d_id

WITH LOCAL CHECK OPTION; 

五、查看视图

查看视图是指查看数据库中已存在的视图的定义,查看视图必须要有SHOW VIEW的权限,MySQL数据库下的user表中保存着这个信息。查看视图的方法包括DESCRIBE语句、SHOW TABLE STATUS语句、SHOW CREATE VIEW语句和查询information_schema数据库下的views表等。

1、DESCRIBE语句查看视图基本信息

DESCRIBE 视图名;(DESC 视图名;)

2、SHOW TABLE STATUS 语句查看视图基本信息

SHOW TABLE STATUS LIKE ‘视图名’;

其中,"LIKE"表示后面匹配的是字符串;“视图名”参数只要查看的视图的名称,需要用单引号引起来。

3、SHOW CREATE VIEW语句查看视图详细信息

SHOW CREATE VIEW 视图名 \c

4、在views表中查看视图详细信息

所有视图的定义都存在information_schema数据库下的views表中。可以查看所有的视图表。

SELECT*FROM information_schema.views;

其中,“*”表示查询所有的列的信息;“information_schema.views”表示information_schema数据库下面的views表。

六、修改视图

1、通过CREATE OR REPLACE VIEW语句修改视图

该语句的使用非常灵活。在视图已经存在的情况下,对视图进行修改;视图不存在时,可以创建视图。

CREATE OR REPLACE [ALGORITHM={UNDEFINED/MERGE/TEMPTABLE}] VIEW 视图名 [(属性清单)] AS SELECT 语句 [WIYH[CASCADED/LOCAL]] CHECK OPTION];

2、ALTER语句修改视图

ALTER语句可以修改表的定义,可以创建索引还可以修改视图。

ALTER [ALGORITHM={UNDEFINED/MERGE/TEMPTABLE}] VIEW 视图名 [(属性清单)] AS SELECT 语句 [WIYH[CASCADED/LOCAL]] CHECK OPTION];

七、更新视图

通过视图来插入INSERT、更新UPDATE、删除DELETE表中数据。只能更新权限范围内的数据,超出了范围就不能更新。

UPDATE 试图名 SET 语句

以下几种情况是不能更新视图的:

1、视图中包含SUM()、COUNT()、MAX()、MIN()等函数。

2、视图中包含UNION、UNION ALL、DISTINCT、GROUP BY、HAVINO等关键字。

3、常量视图。

4、视图中的SELECT中包含了子查询。

5、由不可更新的视图导致的视图是不可更新的。

6、创建视图时,ALGORITHM为TEMPTABLE类型。

7、视图对应的表上存在没有默认值的列,而且该列没有包含在视图中。

八、删除视图

删除数据库中已存在的视图。删除时,只能删除视图的定义,不会删除数据。使用DROP VIEW语句来删除视图。但是,用户必须拥有DROP权限。

查询权限:SELECT Drop_priv FROM mysql.user WHERE user='root'

DROP VIEW [IF EXISTS] 视图名列表 [RESTRICT/CASCADE]

“视图名列表”表示可以是多个视图

 

0 0

你感兴趣的课程

2万+浏览/ 158学员/ 5评分
免费
2万+浏览/ 422学员/ 0评分
免费
1万+浏览/ 390学员/ 4.6评分
免费