视图是从一个或多个表导出来的表,是一种虚拟存在的表。视图就像是一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不用看到整个数据库中的数据,而只是关心对自己有用的数据。视图可以使用用户的操作更方便,而且可以保障数据库系统的安全性。
为了提高复杂SQL语句的复用性和表的操作的安全性,MySQL数据库管理系统提供了视图特性。视图行和列数据来自定义视图的查询所引用的基本表,在具体引用视图时动态生成。
create (or replace) [algorithe =undefined|merge|template]
view viewname [columlist]
as select statement
[with [cascaded|local] check option]
create表示创建新的视图;replace表示替换已经创建的视图;algorithm表示视图选择的算法;viewname表示视图的名称;columnlist为属性列;select statement表示select语句;参数with [ cascaded| local] check option 表示视图在更新是保证在视图的权限范围之内。
algorithm 的取值有3个:undefined表示mysql将自动选择算法;merge表示将使用的视图语句与视图定义结合起来,使得视图定义的某一部分取代语句对应的部分;template表示将视图的结果存入临时表,然后用临时表来执行语句。
cascaded与local为可选参数,cascaded为默认参数,表示更新视图时要满足所有相关视图和表的条件,而local表示更新视图时满足该视图本身定义的条件即可。
create view view_selectemployee AS
select id,name,gender,age,deptno from t_employee;
create algorithm=merge view
view_dept_employee(name,dept,gender,age,loc)
AS select name,t_dept.deptname,gender,age,t_dept.location from t_employee,t_dept
where t_employee.deptno = t_dept.deptno
with local check option;
describe | desc viewname;
show table status from databasename [like 'table or view'];
alter [algorithe =undefined|merge|template]
view viewname [columlist]
as select statement
[with [cascaded|local] check option]
更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟表,其中没有数据,通过视图更新时,都是转换到基本表来更新。更新视图时,只能更新权限范围内数据,超出了范围,就不能更新。
# 创建视图
CREATE VIEW view_selectdept(name,product,loc)
AS SELECT deptname,product,location FROM t_dept where deptno=1;
# 更新视图
UPDATE view_selectdept
SET name='hr_department',product='hr_system',loc='east_10';
# 等价于
UPDATE t_dept
SET deptname='hr_department',product='hr_system',location='east_10'
WHERE deptno=1;
即对视图的更新相当于对基本表的更新。
删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。
drop view viewname[,viewname];
注: 本文参考《Mysql 5.7 从入门到实践》张婷 一书。