当前课程知识点:MySQL数据库案例教程 >  第4章 查询与视图 >  4.6 视图 >  4-6视图视频2

返回《MySQL数据库案例教程》慕课在线视频课程列表

4-6视图视频2在线视频

下一节:4-6视图课件

返回《MySQL数据库案例教程》慕课在线视频列表

4-6视图视频2课程教案、知识点、字幕

  前面讲过了学习了视图的创建

修改和删除的操作

下面我们就来学习如何使用视图

操作基本表中的数据

视图创建好了以后可以当作基本表一样来使用

可以视图对基本表数据完成查询

添加、修改和删除的操作

我们首先来查询数据

来看【案例3】

查询 女生的sid

sname,sex,department和年龄

  那么这个查询可以从student表中去做查询

也可以通过刚刚创建的v1视图来查询

查询语句可以这样写

   Select * from v1 where sex=’女’;

  执行

查询完成

可以看到在这个查询里v1作为查询的数据源

  下面我们通过视图来添加记录

  来看【案例4】

通过v1插入如下记录

学号8888

姓名张敏敏

性别女

系部信息工程系

  我们尝试着用视图来添加数据

语句可以这样写

  Insert into v1

(sid,sname,sex,department)

  Values(‘8888’,‘

张敏敏’,’女’,’信息工程系’)

  我们来执行命令

目标视图不能进行插入操作

  出现错误

不能插入记录

原因是什么呢?

原因是v1视图里有一个表达式

计算年龄的表达式

当视图的列包含表达式的时候

是不能通过视图往表中添加记录

我们再来通过v2插入如下记录

学号 9999

姓名张萌萌

课程号01

课程名大学英语

成绩90

  V2视图的数据来自于三个表

如果命令这样写

  Insert into v2

  Values(‘9999’

  张萌萌’,’01’,’大学英语’,90)

  那么能不能把这些数据

同时插入到三个表中呢?

我们来尝试一下

运行是不可以的

不能插入数据到连接视图stu.v2中

也就是说不能通过视图

一次往多个表中添加数据

那能不能通过多表视图

往一个表中添加数据呢?

  来看【案例6】

通过v2往course表插入如下记录

课程代号:55

课程名称:人工智能

  在插入记录之前

我们先来查看视图v2的列来自于哪些表

可以看到cno和cname

这两个字段来自于course这个表

命令可以这样写

  Insert into v2(cno,cname)

  Values(‘55’, ‘人工智能’)

  执行

可以看到一行受影响

我们再来看有没有插入到course表中

  Select * from course;

  可以看到55

人工智能这门课已经插入到cname表中

  通过这个案例我们可以看到

通过多表视图往表中插入记录时

一次只能往一个表中插入数据

  那接下来我们把v1做一下修改

去掉计算的列age

执行

成功

那我们接下来再来执行案例4

插入成功

  再来看记录有没有插入到student表中

  Select * from student

可以看到记录插入成功

通过视图往表中插入数据失败通常的原因

有这样几个

第一

定义视图的select语句后面

有数学表达式或聚合函数

第二

操作的视图定义在多个表上

第三

没有满足视图定义的基本条件

第四

定义视图的select语句中

使用了DISTINCT,UNION

TOP,GROUP BY等短语

这些都会导致视图往基本表中插入记录失败

请同学们在使用时一定要注意这些问题

  那接下来我们来看

如何通过视图来修改基本表中的数据

  如通过v1修改记录

将8888的学号修改为6688

  语句可以这样写

  Update v1

  Set sid=’6688’

  Where sid=’8888’;

  点击执行

执行成功

来查看数据

  Select * from student;

  可以看到张敏敏学号已经修改为6688

  还可以通过视图来删除基本表的数据

来看【案例8】

通过视图v1

将学号修改为“6688”的记录删除

  语句可以这样写

  Delete v1 where sid=’6688’

  执行成功

  来查看数据

  Select * from student;

  可以看到6688的记录已经不存在了

  我们通过刚刚的几个案例来学习了

如何通过视图来

查看、添加、修改和删除表中的记录

  下面我们来学习check option子句的使用

  来看【案例9】

新建视图v3

查询score表中

result在70分以上的sid,cno,result

不启用检查约束

通过v3视图来插入如下记录

0306 ,01,60

  V3视图已经创建完成

可以来看创建它的语法

  CREATE VIEW`

stu`.`v3`AS (SELECT

sid,cno,result FROM score

  WHERE result>=70);

  接下来通过v3视图来插入记录

   Insert into v3

   Values(‘0306’,’01’,60)

  请大家注意

这个60并不满足视图v3

创建时的成绩在70分以上的这个条件

那能不能插入进去呢?

我们尝试着执行一次

可以看到是能够执行成功的

请大家记住

0306,01,60这几个数据

来查看插入的数据

select* from v3;

并不能看到插入的新记录

那么它有没有插入到score表中去呢

执行select * from score;

可以看到新记录插入到score表中

请大家想一想是什么原因导致的呢?

就是v3视图看不到数据

但是插入到了score表中了

这是因为V3视图虽然有条件

但是没有启用检查约束

因此在操作数据时

数据是不受约束条件的影响

但是呢视图本身是查询满足条件的数据

  我们再来看一个案例

  【案例10】

新建视图v4

查询v3中的result在90分以下的

sid,cno,result,并使用

CASCADED检查约束

通过v4完成记录的添加

  (1)0306 ,02,60;

  (2)0306 ,02,80;

  请同学们记住v3中的条件是70分以上

v4中的条件是90分以下

启用cascaded约束会有什么效果呢?

我们来看v4视图已经创建成功了

它的数据来源是v3视图

约束条件是result小于等于90

with cascaded check option

  那我们接下来插入0306’,’02’,60

语句可以这样写

  Insert into v4

   Values(‘0306’,’02’,60)

  执行失败

原因呢是成绩60不满足

v3视图的成绩在70分以上

和v4视图成绩90分以下的条件

  那我们来插入

  0306 ,02,80;

  80在呢在70到90分之间

  Insert into v4

  Values(‘0306’,’02’,80)

  执行成功

共一行受影响

我们来查看数据

  Select * from score

  可以看到

0306’,’02’,80

这一行记录插入到表中了

  下面我们再来看一个案例

  【案例11】

新建视图v5

查询v3中的result在90分以下的

sid,cno,result,并使用local检查约束

  请同学们注意看

v5视图和v4视图

查询条件和数据源是一样的

只是启用的约束不同

v4启用cascaded约束

v5启用local检查约束

  那通过v5视图完成记录添加

  (1)0306 ,03,95;

  (2)0306 ,03,60;

  V5视图已经创建成功

数据源v3

条件result>90

检查约束采用的是local

  下面我们就通过v5来添加记录

  Insert into v5

  Values(‘0306’,’03’,95)

  执行失败

因为95不满足视图

v5自身的result小于

90分以下的约束条件所以插入失败

  再来插入:0306 ,03,60;

  60这个数据满足v5视图小于90分的条件

但是不满足v3大于70分的条件

能不能插入进去呢?

  Insert into v5

  Values(‘0306’,’03’,60)

  执行成功

来查看数据有没有插入进去

可以看到‘0306’,’03’,60插入到表中了

  通过这两个案例我们可以看出

当使用cascaded约束时

它既要满足v3视图的约束

也要满足v4视图的约束条件

当使用local检查约束时

它只需要满足v5视图的约束条件就可以了

  接下来我们对本次课做个小结

本次课我们学习了

   1. 视图的概念与优点

   2. 视图的创建、修改与删除

   3. 通过视图操作基本表的数据

  尽管视图使用起来有很多优点

但是也存在性能差、修改限制等缺点

在实际工作中

合理设计和使用视图才能够提高效率

请同学们下载素材完成操作练习

本次课就讲到这里

谢谢

再见

MySQL数据库案例教程课程列表:

第1章 数据库基础知识

-1.1 数据库基础知识

--1.1 数据库基础知识视频

--1-1数据库基础知识课件

-1.2 MySQL的安装与运行

--1-2MySQL安装与运行视频

--1-2MySQL安装与运行课件

--1-2MySQL安装与运行实训

-第1章 测试

第2章 数据库和表的基本操作

-2.1 数据库的基本操作

--2-1数据库的基本操作视频

--2-1数据库的基本操作课件

--2-1数据库的基本操作实训

-2.2 表的基本操作

--2-2表的基本操作视频

--2-2表的基本操作课件

--2-2表的基本操作实训

-2.3 MySQL数据类型

--2-3MySQL数据类型视频

--2-3MySQL数据类型课件

--2-3MySQL数据类型实训

-2.4 约束设置

--2-4约束设置视频

--2-4约束设置课件

--2-4约束设置实训

-2.5 索引

--2-5索引视频

--2-5索引课件

--2-5索引实训

-第2章测试

第3章 记录操作

-3.1 插入记录

--3-1 插入记录视频

--3-1插入记录课件

--3-1插入记录实训

-3.2 修改记录

--3-2修改记录视频

--3-2修改记录实训

--3-2修改记录课件

-3.3 删除记录

--3.3删除记录

--3-3删除记录实训

--3-3删除记录课件

-第3章 测试

第4章 查询与视图

-4.1 select语句

--4.1select 语句视频

--4-1select语句课件

--4-1select语句实训

-4.2 单表查询

--4-2-1select子句

--4-2-2where子句

--4-2-3group子句

--4-2单表查询实训

-4.3 多表查询

--4-3多表查询视频

--4-3多表查询课件

--4-3多表查询实训

-4.4 子查询

--4-4子查询视频1

--4-4子查询视频2

--4-4子查询课件

--4-4子查询实训

-4.5 外键

--4-5外键视频

--4-5外键课件

--4-5外键实训

-4.6 视图

--4-6视图视频1

--4-6视图视频2

--4-6视图课件

--4-6视图实训

-第4章测试

第5章 高级操作

-5.1 函数

--5-1自定义函数视频

--5-1系统函数

--5-1函数课件

--5-1 函数实训

-5.2 流程控制语句

--5-2流程控制语句视频

--5-2流程控制课件

--5-2流程控制实训

-5.3 事务与游标

--5-3事务与游标视频

--5-3事务与游标课件

--5.3事务与游标实训

-5.4 存储过程

--5-4存储过程视频

--5-4存储过程课件

--5-4存储过程实训

-5.5 触发器

--5-5触发器视频

--5-5触发器课件

--5-5触发器实训

-第5章测试

第6章 备份与还原

-6.1 数据库备份与还原

--6-1数据库备份与还原 视频

--6-1数据库备份与还原 课件

--6-1数据库备份与还原 实训

-6.2 异构数据源导入导出

--6-2异构数据源导入导出 视频

--6-2异构数据源导入导出 课件

--6-2异构数据源导入导出 实训

-第6章测试

第7章 用户与权限

-7.1 用户管理

--7-1用户管理 视频

--7-1用户管理 课件

--7-1用户管理 实训

-7.2 权限管理

--7.2 权限管理 视频

--7.2 权限管理 课件

--7.2 权限管理 实训

-7.3 应用实例开发

--7-3应用实例开发 视频

--7-3应用实例开发 课件

--7-3应用实例开发 实训

-第7章测试

4-6视图视频2笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。