上一篇博客讲了索引,这一篇博客我来说说我对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;

创建视图vv1:

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_bt
where t_b.bookTypeId = t_bt.id;

创建视图vv2

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中方式:

方式1:

desc v1;

方式2:

show table status;

方式3:

show create view v1;

方式4:

直接从表结构看

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;

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