标签:
视图由数据库中的一个或多个表导出的虚拟表,用户可以不用看到整个数据库表中的数据而只关心对自己有用的数据,也保障了数据库系统的安全性。数据库只存放视图的定义,其数据来源于原来的表中。所以源表中数据改变,视图的数据也会改变。视图可以简化重复的查询操作,增加数据的安全性。
1.创建视图
create [algorithm={undefined|merge|temptable}] view 视图名 [(属性清单)] as select 语句 [with [cascaded|local] check option];
algorithm:可选参数,表示视图选择的算法。视图名:要创建视图的名称。select语句:一个完整的查询语句,并将满足条件的记录导入到视图中。cascaded:表示更新视图时要满足所有相关视图和表的条件。在使用create view 时最好加上with check option参数+cascaded,更新视图需要考虑其父视图的约束条件。这种方式比较严格,可以保证数据的安全性。
(1).查询是否具有CREATE VIEW权限
SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user=‘root‘;
(2).在表test0上创建一个简单视图
create view test0_view1 as select id,name from test0;
desc test0_view1;//查看视图
show table status like ‘视图名‘ \G; //查看视图基本信息,comment为view还是空是视图和普通表最直接的区别。
show create view 视图名 \G; //可以查看视图的详细定义。
2.在多表上创建视图
create algorithm=merge view woker_view1(name,department,sex,age,address) as select name,department.d_name,sex,2009-birthday,address from worker,department where worker.d_id=department.d_id with local check option;
3.修改视图
(1).create or replace
create or replace [algorithm={undefined|merge|temptable}] view 视图名 [(视图清单)] as select 语句 [with [cascaded|local]check option]
eg: create or replace algorithm=temptable view example_view2(id,use_id) as select id,use_id from example;
(2)alter view
eg:alter view example2_view1(stu_id,grade) as select stu_id,grade from example2;
4.更新视图:通过视图来insert ,update,delete表中的数据,对应的是源表数据。将视图作为查询数据的虚表而不要通过视图来更新数据。
(1). update 视图名 set 属性名1=新值1,属性名2=新值2;
a.不能更新视图情况:
1).视图中包含:sum(),count(),max(),min()等函数.
eg:create view worker_view4(name,sex,total) as select name,sex,count(name) from worker;
2).视图中包含union,union all,distinct,group by和havig等关键字.
eg:create view worker_view5(name,sex,address) as select name,sex from worker group by d_id;
5.删除视图
drop view [if exists] 视图名列表 [pestrict|cascade];
if exists:判断视图存在,如果存在则执行,不存在则不执行。
标签:
原文地址:http://www.cnblogs.com/mingshsu/p/4871296.html