含义:从数据库一个或多个表中导出的虚拟表
作用:
方便用户操作: 要求所见即所需,无需添加额外的查询条件,直接查看
增加数据的安全性:通过视图,用户只能查看或修改指定的数据
提高表的独立逻辑性:原有数据表结构的变化,不会影响视图,如果修改原有列,则只需修改视图即可。
语法:
MYSQL
create
[algorithm = {undefined | merge | temptable}]
view 视图名[{属性清单}]
as select 语句
[with [cascaded|local] check option];
algorithm:选择的算法
with check option:表示更新视图时要保证在该视图的权限范围之内
undfined:表示MySQL 自动选择所需使用的算法
merge:表示将视图的语句与视图的定义合并,使得视图定义的某一部分取代语句的对应部分
temptable:将视图的结果存入临时表
cascaded:表示更新视图时要满足所有相关视图和表的条件
local:表示更新视图时,要满足该视图本身的定义的条件即可
Mssql
create
view 视图名 as select 语句;
是否有权限创建?(mysql)
通过SQL 查询:
select select_priv,create_view_priv from mysql.user where user = ‘root’;
创建视图
在单表上创建视图:
eg:
create view department_view1 as select * from department;
create view department_view2(name) as select d_name from department;
在多表上创建视图
create algorithm = merge view
employee_view1(name,department,sex,age,address)
as select name,dept.d_name,sex,age,address
from employee emp inner join department dept on emp.e_no = dept.e_no
with local check option;
查看视图(mysql)
desc 查看
eg:
desc department_view1;
查看视图 (mssql)
sp_helptext查看
eg:
exec sp_helptext department_view1;
在sysobjects表中查看(状态)
eg:
select * from sysobjects where name = 'enployee_view1'
查看视图(Oracle)
在user_views 表中查看(定义)
eg:
select view_name,text from user_views where view_name = upper('vm_employee');
修改视图
通过create or replace view 修改(mysql)
没有则创建,有则修改
eg:
create or replace algorithm = temptable
view department_view1(department)
as select d_name from department;
通过alter 修改
只能修改不能创建
eg:
alter view department_view2(department)
as select d_name
from department dept
with check option;
eg:
update department_view3 set name ='研发部';
注:更新视图实际上是更新表;并非所有的视图都能更新;
视图不能更新情况:
视图中包含聚合函数
eg:
create view employee_view4(name)
as select name,sex,count(name) from employee;
视图中包含union、union all、distinct、group by和having等关键字
eg:
create view employee_view5(name,sex,address)
as select name,sex,address from employee group by e_np;
常量视图
eg:
create view employee_view6
as select 'Boyce' as name;
视图中的select 中包含子查询
eg:
create view employee_view7(name)
as select (select name from employee);
由不可更新的视图导出的视图(mysql)
eg:
create view employee_view8
as select * from employee_view7;
创建视图时,algorithm 为temptable 类型(mysql)
eg:
create algorithm = temptable
view employee_view9
as select * from employee;
视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。[最好视图仅限于查询,若要更新则要考虑全面,否则会造成更新失败]
语法:
drop view [if exists] 视图列表
eg:
drop view if exists employee_view1;
drop view if exists department_view1,department_view2;
判断用户是否有权限:
eg:
select drop_priv from mysql.user where user = 'root';
---------------------如有错误欢迎指证-------------------------------