select select_priv, Create_view_priv from mysql.user where user='root';
create table department(
d_id int not null primary key auto_increment,
d_name varchar(20),
function varchar(50),
address varchar(50),
index index_dn(d_name)
);
create table worker(
num int(10) not null primary key,
d_id int(4),
name varchar(20) not null,
sex varchar(4) not null,
birthday datetime,
homeaddress varchar(50),index index_dn(d_id)
);
select * from information_schema.views\G
create or replace algorithm=temptable
view department_view1(department,function,location)
as select d_name,function,address from department;
一、视图是一种虚拟的表。视图从数据库中的一个或多个表导出来的表。视图还有从已经存在的视图的基础上来定义。数据库中只存放了视图的定义,并没有存放视图中数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。
二、视图是在原有的表或者视图的基础上重新定义的虚拟表,这可以从原有的表上选取对用户有用的信息。那些对用户没有用,或者用户没有权限了解的信息,都可以直接屏蔽掉。这样做即使应用简单化,也保证了系统的安全。视图起着类似筛选的作用。视图的作用归纳如下:
使操作简单化 增加数据的安全性 提高表的逻辑独立性
三、在单表创建视图的语法形式
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]
“视图名列表”表示可以是多个视图
学员评论
xxoo82015-12-16
你感兴趣的课程