Mysql-视图

1.什么是视图?

  视图是由数据库中的一个表或多个表导出的虚拟表。其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而没有存放视图中的数据。这些数据还是存在原来的表中,使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此视图中的数据是依赖于原来的表中的数据。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

  视图是存储在数据库中的查询的SQL语句,它主要出于两种原因:

  1.1 安全原因:视图可以隐藏一些数据

  1.2 可以使复杂的查询易于理解和使用。

2.视图的作用

  对视图中所引用的基础表来说,视图的作用类似于筛选。

  2.1 简单性:看到的就是需要的

      视图不仅可以简化用户对数据的理解,也可以简化他们的操作,那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

  2.2 安全性

      视图的安全性可以防止未授权用户查看特定的行或列,使有权限用户只能看到表中特定行的方法

      1.在表中增加一个标志用户名的列

      2.建立视图,使用户只能看到标有自己用户名的列

      3.把视图授权给其他用户

    2.3 逻辑数据独立性

    视图可以使应用程序和数据库表在一定程度上独立,如果没有视图,程序一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

    1.如果应用建立在数据表上,当数据库表发生变化时,可以在表上建立视图,通过视图屏蔽表的变化,从而使应用程序可以不动。

    2.如果应用建立在数据表上,当应用发生变化时,可以在表上建立视图,通过视图屏蔽应用的变化,从而使应用程序可以不动。

    3.如果应用建立在视图上,当数据库表发生变化时,可以在表上修改视图,通过视图屏蔽表的变化,从而使应用程序可以不动

    4.如果应用建立在视图上,当应用发生变化时,可以在表上修改视图,通过视图屏蔽应用的变化,从而使数据库可以不动。

  3. 创建视图

  创建视图是在已经存在的数据库表上建立视图,视图可以建立在一张表中,也可以建立在多张表中。

  3.1 查看创建视图的权限

  创建视图需要CREATE VIEW的权限,同时应该具有查询涉及列的权限。可以使用select语句来查询这些权限信息,查询语法如下。

 

select Select_priv,Create_view_priv from mysql.user where user=‘root';

3.2 创建视图

  1.在tb_book上建立视图

CREATE 
VIEW book_view(a_sort,a_talk,a_books)//视图名(属性清单:可选参数,指定视图中各个属性的名称,默认情况下与select语句中查询的属性相同) AS SELECT sort ,talk,books from tb_book;

 

  2.在tb_book表和tb_user表上创建名为book_view1的视图

 

CREATE  algorithm=merge //视图选择的算法
VIEW book_view1(a_sort,a_talk,a_books,a_name)
as select sort,talk,books,tb_user.name from tb_book,tb_name where tb_book.id=tb_name.id 
with local check option;//表示视图更新时要保证在该视图的权限范围之内。

3.在实际开发过程中的数据表中可能有很多的字段,但某个模块可能只需要其中的几个。为了提高查询的速度和简化操作,可以将该模块需要的字段单独提取出来放在某个视图中。

 例子:有学生表和成绩表,在建立的视图中只含有与学生成绩有关的字段

 

CREATE 
view scoreinfo 
as select sno.sname,yw,wy,sx from tb_student,tb_score where tb_student.id=tb_score.sid;

创建视图的注意事项:

1.运行创建视图的语句需要用户具有创建视图的权限,若加了[or replace]时,还需要用户具有删除视图的权限

2.select语句不能包含from子句中的子查询

3.select语句不能引用系统或用户变量

4.select语句不能使用预处理语句参数

5.在存储子程序内,定义不能引用子程序参数或局部变量。

6.在定义引用的表或者视图必须存在。但是创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可以使用CHECK TABLE语句。

7.在定义中不能引用临时表,不能使用临时视图

8.在视图中定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略。

4.视图操作

4.1查看视图

  1.DESCRIBE(简写成DESC)

 

DESC bool_view1;

 

   2.show table status

 

show table status like 'scoreinfo'//like表示后面匹配的是字符串,视图是要查看的视图名称,需要用单引号定义

 

  3.show create view 

show create view scoreinfo; 

4.2 修改视图

修改视图是修改数据库中已存在的表的定义。当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。

1.create or replace view

CREATE OR REPLACE 
ALGORITHM=TEMPTABLE
VIEW  book_view(a_sore,a_book)
as select sort,books from tb_book;

 

2.alter

alter view book_view1(a_sort)
as select sort
from tb_book
with check option; 

4.3 更新视图

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

 update scoreinfo set yw="90" where id=2;

1.更新视图的限制

 (1)视图中包含count(),sum(),max(),min()函数

create
view bookview(a_sort,a_book)
as select sort,books ,count(name) from tb_book group by id;

  (2) 视图中包含union,union all,distinct,group by 和having等关键字

 

create 
view book_view1(a_sort,a_book)
as select sort,books from tb_book group by id;

 (3)常量视图

 

CREATE 
VIEW book_view 
as select 'Aric' as a_book;

 (4) 视图的select中包含子查询

 

CREATE 
VIEW book_view1(a_sort)
as select (select name  from tb_book);

(5)由不可更新的视图导出的视图

CREATE 
VIEW book_view1
AS SELECT * FROM book_view2;

 

(6) 创建视图时,ALGORITHM为TEMPTABLE类型 

CREATE ALGORITHM=TEMPTABLE
VIEW book_view1
as select * from tb_book;

4.4 删除视图

 删除视图是指删除数据库中已经存在的视图。删除视图时,只能删除视图的定义,不会删除数据。mysql中使用DROP VIEW语句来删除视图。但是用户必须有DROP权限。

DROP VIEW IF EXISTS bOOK_view1;

 

 

  

 

转载于:https://www.cnblogs.com/cainame/p/11255601.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值