MySQL数据库复习之(五)-- 视图

视图是从一个或多个表导出来的表,是一种虚拟存在的表。视图就像是一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不用看到整个数据库中的数据,而只是关心对自己有用的数据。视图可以使用用户的操作更方便,而且可以保障数据库系统的安全性。
为了提高复杂SQL语句的复用性和表的操作的安全性,MySQL数据库管理系统提供了视图特性。视图行和列数据来自定义视图的查询所引用的基本表,在具体引用视图时动态生成。

  • 特点:
  1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系
  2. 是由基本表(实表)产生的表(虚表)

创建视图

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;

查看视图

  1. 使用 describe | desc 语句查看视图基本信息
    describe | desc viewname;
  2. 使用 show table status 语句查看视图基本信息
    show table status from databasename [like 'table or view'];
  3. 使用show create view 语句查看视图详细信息

修改视图

  1. 使用create or replace view 语句修改视图
    在视图已经存在的情况下,对视图进行修改;视图不存在的情况下,可以创建视图。
  2. 使用ALTER语句修改视图
    alter  [algorithe =undefined|merge|template]
    view viewname [columlist]
    as select statement 
    [with [cascaded|local] check option]
    

更新视图

更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟表,其中没有数据,通过视图更新时,都是转换到基本表来更新。更新视图时,只能更新权限范围内数据,超出了范围,就不能更新。

  • SQL语句更新视图
    # 创建视图
    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;
    

即对视图的更新相当于对基本表的更新。

  • 更新基本表后视图自动更新
  • 不能更新的视图
    对视图的更新最后都是实现在基本表上,更新视图时,实际上更新的是基本表上的记录。
  1. 视图包含sum(),count(),max(),和min()等函数。
  2. 视图中包含union(),union all,distinct,group by 和having等关键字
  3. 常量视图
  4. 视图中的select 中包含子查询
  5. 由不可更新的视图导出的视图
  6. 创建视图时,algorithm为temptable类型

删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。
drop view viewname[,viewname];

注: 本文参考《Mysql 5.7 从入门到实践》张婷 一书。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值