初学mysql(七)-数据库之视图

来源:互联网 发布:淘宝弹力椅套 编辑:程序博客网 时间:2024/05/21 11:22

       上一篇博客讲了索引,这一篇博客我来说说我对mysql数据库视图的学习。

       定义:是一个由查询语句定义数据内容的表,表中的数据就是SQL语句查询的数据的结果集,行和列均来自SQL查询语句中使用的数据表。视图是一种虚拟的表,是从数据库中一个或者多个实体表中导出来的虚表;数据库中只存放了视图的定义,并没有存放视图中的数据,数据还是在原来的表中存在;使用视图查询数据时,数据库系统会从原来的表中取出来的数据,节省存储空间。

       优势:1):使用视图使操作简单化,用户不用理解清楚表之间的复杂的逻辑关系,不改变实体表的表结构,将经常使用的SQL语句定义为视图,可以有效的避免重复的代码量。2):使用视图可以增加数据的安全性。用户只能访问到视图给定的内容集合,这些都是数据表的某些行和列,避免用户直接操作数据表引发的一系列错误。3):提高了表的逻辑独立性。应用程序访问是通过视图访问数据表,从而程序和数据表之间被视图分离。如果数据表有变化,不用去修改SQL语句,只需去修改定义的视图语句即可,不用调整代码程序。4):容易解决复杂的查询需求。用视图可以将复杂的问题分解,然后将创建多个视图获取数据,再将视图联合起来就能得到需要的结果。

        工作机制:当调用视图语句的时候,才会执行视图的SQL语句,从数据库中的一个或者多个表中存取数据。视图的内容不会存储,节省硬盘空间,它是在视图被引用的时候才派生出来数据。由于是随时操作随时调用,视图的内容与真实表的内容总是一致的。

      实例:t_book表字段:

create table t_book(     id primary key auto_increment,     bookName varchar(20),     price double,     author varchar(20),     bookTypeId int,     bookCount double);

t_bookType表字段:

create table t_bookType(    id primary key auto_increment,    bookTypeName varchar(20),    bookSum double);

语法格式:

create[algorithm={undefined|merge|temptable}] view 视图名字 as select 字段 from 表名 [with [cascaded|local]check option];

        algorithm为可选参数,表示视图选择的算法,undefined表示mysql将自动选择所要用的算法;merge表示将视图的语句与视图的定义合并起来,使得视图定义的某一部分取代语句的对应部分;temptable表示将视图结果存入临时表,然后使用临时表执行语句。

       with check option 为可选参数,表示更新视图时要保证在视图的权限范围内。cascaded表示更新视图时要满足所有相关视图和表的条件才进行更新;local表示更新视图时要满足该视图本身定义的条件即可更新。

      1:创建视图1使其可以查询到bookName,以及它的总价值:

     

create view v1(书名,总价值) as select bookName, price*bookCount from t_book with local check option;   


      查询视图v1: 

     

  select *from v1;

create view vv1 as select bookName as 书名, price*bookCount as 总价值 from t_book;   



       查询视图vv1: 

select *from vv1;

      2:创建视图2使其可以查询到bookName所对应的bookTypeName名称:

     

create view v2(书名,书籍类别名称) as select t_b.bookName, t_bt.bookTypeName from t_book t_b, t_bookType t_btwhere t_b.bookTypeId = t_bt.id;

create view vv2(`书名`,`书籍类别名称`) as select t_b.bookName, t_bt.bookTypeName from t_book t_b, t_bookType t_bt where t_b.bookTypeId = t_bt.id;



      查询视图v2: 

select * from v2;

      3:创建视图v3使其可以查询到bookName中价格大于30的书籍视图v3:

   

create view v3   as select bookName 书名,price 价格 from t_book where price > 30;  

     查看视图v3: 

select * from v3;

      4:查看视图有4中方式:

desc v1;

 show table status;

show create view v1;

直接从表结构看

      5:更改视图两种方式:

create or replace view v1 as select * from t_book;

alter view v1 as select bookName as 书名, price*bookCount as 总价值 from t_book;

      6:更新视图:更新视图是指通过视图来插入、删除、更新表中的数据,由于视图是一个虚表只有表结构没有数据,因此更新视图都是转化为更新基本表来更新,但是更新视图只能在权限范围内,不能超出权限。

假设视图v1为

 create view v1 as select * from t_book with local check option;

 插入数据:

insert into v1 values(null, 'java', 100,'Bge', 1, 3);

跟新数据:

update v1 set bookName='Big Java', price = 88, author = 'BShu' where id = 1;

删除数据:

delete from v1 where id = 1;

7:删除视图:

drop view if exists v1;

这就是我学视图所总结的,如有问题请留下脚步。



      





                





    

0 0