mysql视图学习05

概念

1.什么是视图

数据库视图是是一种虚拟存在的表,是一个逻辑表,本身并不包含数据,它被定义为具有连接的SQL SELECT查询语句。 因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据。

2.视图的作用

使用视图的大部分情况是为了保障数据安全性,提高查询效率,主要作用如下:
(1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
(2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
(3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

二、创建视图

视图中包含了select查询的结果,因此视图的创建是基于select语句和已存在的数据表,视图可以建立在一张表上,也可以建立在多张表上。语法形式如下:

create [or replace] [algorithm = {undefined | merge | temptable}] 
view [db_name.]view_name [(column_list)] 
as select_statement 
[with [cascaded | local] check option

1.在单表上创建视图

use study;
/*在单表上创建视图*/
create table t (quantity int,price int);
insert into t values(3,50);
 create view view_t as select quantity,price,quantity*price from t;create view view_t2(qty,price,total) as select quantity,price,quantity*price from t;

2.在多表上创建视图mysql也可以在两个或两个以上的表上创建视图。
在student表和stu_info表上创建视图。

 /*在多表上创建视图*/
 create table student(id int,name char(25));
 create table stu_info(id int,glass char(25),province char(25));
 insert into student values(1,'liu1'),(2,'li2'),(3,'qiao3');
 insert into stu_info values(1,'1ban','anhui'),(2,'2ban','beijing'),(3,'3ban','shanghai');
 create view stu_glass(id,name,glass) as select student.id,student.name,info.glass from student,stu_info where student.id=stu_info.id;

三、查看视图查看视图必须要有show view权限,mysql数据库下的user表中保存着这个信息。查看视图的方法包括:

describe、show table status、show create view和在view表中查看。
1.describe语法形式:
describe 视图名;
describe一般简写成desc,效果一样,例如:

describe view_t;
desc view_t;

2.show table status语句查看视图基本信息
语法形式:show table status like ‘视图名’;
例如:

show table status like 'view_t';

3.show create view语句查看视图基本信息
语法形式:show create view 视图名;

show create view view_t;

4.在view表中查看
在mysql中,information_schema数据库下的views表中存储了所有视图的定义。通过对views表的查询,可以查看数据库中所有视图的详细信息,语句如下:

select * from information_schema.views;

四、修改视图

修改视图是指修改数据库中已存在的表的定义,当基表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。
两种方式:
create or replace view语句和alter语句。
1.create or replace view

/*语法格式  create or replace view view_name as select语句;*/
create or replace view view_t as select * from t;desc view_t;

2.alter语句

/*语法格式ALTER    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]    [DEFINER = { user | CURRENT_USER }]    [SQL SECURITY { DEFINER | INVOKER }]VIEW view_name [(column_list)]AS select_statement    [WITH [CASCADED | LOCAL] CHECK OPTION]*/
alter view view_t as select quantity from t;desc view_t;

五、更新视图因为视图本身没有数据,因此对视图进行的dml操作最终都体现在基本表中。

三种方法来更新,分别为
update、insert和delete

update view_t set quantity=5;
select * from view_t;
insert into t values(3,5);
select * from view_t2;
delete from view_t2 where price=5;
select * from view_t2;

标题为什么有的视图可以更新,而有的会失败呢?

下面情况的视图不可以执行insert、update和delete操作:
**多表连接:**包含distinct 包含聚合函数 包含group by、order by、union、union all包含子查询等.
所以对视图执行DML操作的限制条件还是很多的,大多数情况下我们还是对视图进行查询,如果需要DML操作还是建议对实际表进行操作。
视图是一种虚拟的表,数据来源于从实际表中查询的结果,它可以简化查询操作,以及提高数据库的安全性,本章学习了视图的创建和使用语法,视图可以修改但是有比较多的限制条件,一般还是用于查询。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值