上一篇博客讲了索引,这一篇博客我来说说我对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;
这就是我学视图所总结的,如有问题请留