数据库——(11)视图

视图:view,是一种结构(有行有列)但是没有结果(结构中不真实存放数据)的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生(视图的数据来源)。

创建视图
基本语法:create view 视图名字 as select 语句;

创建单表视图:基表只有一个

create view my_v1 as select * from my_class;

创建多表视图:基本至少两个

create view my_v3 as
select s.*,c.name,c.room from my_stu as s
left join my_class c on s.c_id=c.id;

视图一旦创建,系统会在视图对应的数据库文件夹下创建一个对应的结构文件:frm文件

查看视图
查看视图的结构
视图是一张虚拟表:表的所有查看方式都适用与视图。

使用视图
使用视图主要为了查询,将视图直接当作表使用。

修改视图
视图本身不可修改,但是视图的来源可以修改。
修改视图:修改视图本身的来源语句(select 语句)
alter view 视图名字 as 新的select语句;

alter view my_v2 as 
select id,score,sex,height,c_id from my_stu;

删除视图
drop view 视图名字;

视图意义

1.视图可以节省SQL语句:将一条复杂的查询语句使用视图保存,以后可以直接对视图进行直接操作。
2.数据安全:视图操作主要针对查询的,如果对视图结果进行出来(删除),不会影响基表数据(相对安全)。
3.视图往往在大项目中使用,而且是多系统使用:可以对外提供有用的数据,但是隐藏关键(无用)的数据,数据安全。
4.视图可以对外提供友好型:不同的视图提供不同的数据,对外如同专门设计。
5.视图可以更好(容易)的进行权限控制。

视图数据操作
视图是的确可以进行数据写操作的:但是有很多限制。
一、新增数据:是直接对视图进行数据新增(有权限)
注意:

1.多表视图不能新增数据。
2.可以向单表视图插入数据,但是视图中包含的字段必须有,且基表中字段不能为空(或者没有默认值的字段)。

二、删除数据(有权限)
多表视图不能删除数据
单表视图可以删除数据,对基表有影响。

delect from my_v2 where id = 4;

三、更新数据
理论上单表、多表视图都可以更新数据

update my_v3 set c_id = 3 where id =1;

有时候更新有更新限制:with check option,如果对视图在新增的时候,限定了某个字段有限制。比如在对视图进行数据更新操作时,系统会进行验证:要保证数据更新之后,数据依然可以被实体查询出来,否则不让更新。

create view my_v4 as
select * from my_stu where height>179 with check option;

以下语句会不可执行

update my_v4 set height = 170 where id = 2;

视图算法
视图算法:系统对视图以及外部查询视图的select语句的一种解析方式。
视图算法分为三种:

1.undefined:未定义(默认的),这不是一种实际算法,是一种推卸责任的算法,告诉系统视图没有定义算法,系统自己看着办。
2.temptable:临时表算法:系统应该先执行视图的select语句,后执行外部查询语句。
3.merge:合并算法:系统应该先将视图对应的select语句与外部查询视图的select语句进行合并,然后执行(效率高:常态)。

视图算法的选择:如果视图的select语句中会包含一个查询字句,而且很有可能顺序比外部查询语句要靠后,一定要使用算法temptable,其他情况可以不用指定(默认)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值