二十三、视图——二

本部分主要讲通过视图去修改源表中的数据的方法以及这种修改方式的一些限制,这里主要从以下几个方面进行详细说明。

1、通过视图向源表中插入数据

在视图中对源表数据新增就是直接对视图进行数据新增;
基本语法: insert into 视图名[(字段名列表)] values(值列表);
实例:

//通过head_master_view视图向其基表class中插入数据(其中class表中有两个字段,一个为id(主键且自增),另一个cname为课程名)
//通过视图添加课程C++
insert into head_master_view(cname) values('C++');

在这里插入图片描述
通过视图向源表中添加数据的限制条件:

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

2、通过视图删除或者修改(更新)源表中的数据

通过视图删除源表中的数据

基本语法: delete from 视图名 where 条件;
注意事项: 多表视图不能删除数据,单表视图可以进行删除数据;
实例:

//先将head_master_view视图改为以class为基表
alter view head_master_view as select id,cname from class;
//删除掉id为7的记录
delete from head_master_view where id = 7;
通过视图修改(更新)源表中的数据

首先,理论上讲,无论是单表视图还是多表视图,都可以进行更新;
此操作的基本语法: update 视图名 set 字段名=值,....,字段名=值;
此操作的限制: with check option,如果对视图在新增的时候,限定了某个字段有限制,那么在对视图进行数据更新操作时,系统会自动进行验证:要保证更新之后数据依然可以被视图查询出来,否则更新失败。
实例:

//创建一个视图,选出年龄大于15以上的所有学生
create view student_view as select * from student where age>15 with check option;

说明: 这表示视图的数据来源都是年龄大于15岁的,由where age>15决定;with check option决定通过视图更新的时候,不能将已经得到的数据age从15以上改到15以下;如果视图中没有此记录,那么更新自然会失效。
打个比方,比如说id为1号的年龄16岁,从视图中可以查出他,但是不能将其年龄改到15岁或者15岁以下,否则会更新失败。

3、视图算法

首先,有一个实例,是查看每个班身高最高的学生。
解决方案:

//其中一个解决方案如下:
//按照身高降序排列整个学生表并建立视图
create view student_view as select * from student order by height desc;
//在视图中将所有数据按照班级分类
select * from student_view group by c_id;

视图算法定义: 系统对视图以及外部查询视图的select语句的一种解析方式;
视图算法的分类:

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

视图算法的设置:
在创建视图的时候指定:create algorithm = 指定算法 view 视图名字 as select语句;
视图算法的选择方法: 如果视图的select语句中会包含一些查询子句,而且很有可能顺序比外部的查询语句要靠后,一定要使用算法temptable,其他情况不用指定(默认即可)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值