Mysql中视图操作

文章目录

  • 视图
      • 1)创建视图
      • 2)删除视图
      • 3)对视图进行查询操作
      • 4)更新视图
          • a. 插入数据
          • b. 删除数据
          • c. 更新数据
          • a. 插入数据
          • b. 删除数据
          • c. 更新数据

视图

1)创建视图

关系数据库管理系统执行CREATE VIEW语句的结果只是把视图的定义存入数据字典,并不执行其中的SELECT语句。只是在对视图查询时,才按视图的定义从基本表中将数据查出。

create view 视图名 (列名1, 列名2, ...) AS 子查询 with check option

WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。

with check option默认是cascade,即级联检查,等价于with cascaded check option

在更新数据时会保证数据符合视图的条件。如视图是根据专业是IS创建的,插入一个非IS专业的学生是不符合条件的,拒绝插入数据

有条件检查会检查条件是否满足。满足才插入数据。

没有条件检查时,都会插入数据(向视图数据来源),但是视图中只会显示符合视图条件的数据

组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。但在下列三种情况下必须明确指定组成视图的所有列名:

  • 某个目标列不是单纯的属性名,而是聚集函数或列表达式
  • 多表连接时选出了几个同名列作为视图的字段
  • 需要在视图中为某个列启用新的更合适的名字

image-20220327233923049

创建的视图作为数据表被显示

2)删除视图

drop view 视图名 [cascade]

视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其他视图,则使用CASCADE级联删除语句把该视图和由它导出的所有视图一起删除。基本表删除后,由该基本表导出的所有视图均无法使用了,但是视图的定义没有从字典中清除。删除这些视图定义需要显式地使用DROP VIEW语句。

3)对视图进行查询操作

对视图的查询完全可以当初对数据表的查询。因为视图是一个虚拟表。

Mysql中视图操作_第1张图片

4)更新视图

更新视图是指通过视图来插入(NSERT)、删除(DELETE)和修改(UPDATE)数据。由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。像查询视图那样,对视图的更新操作也是通过视图消解,转换为对基本表的更新操作。

为防止用户通过视图对数据进行增加、删除、修改时,有意无意地对不属于视图范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句。这样在视图上增、删、改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行该操作。

a. 插入数据

image-20220328113857584

建表时添加了with check option, 会进行条件检查。表要求adept = ‘is’,插入的数据中adept = null,不符合视图规则,条件检查失败,拒绝插入数据。

Mysql中视图操作_第2张图片

b. 删除数据

Mysql中视图操作_第3张图片

视图数据来源相应数据也被删除

c. 更新数据

在原表中的数据也发生了更改

询视图那样,对视图的更新操作也是通过视图消解,转换为对基本表的更新操作。

为防止用户通过视图对数据进行增加、删除、修改时,有意无意地对不属于视图范围内的基本表数据进行操作,可在定义视图时加上WITH CHECK OPTION子句。这样在视图上增、删、改数据时,关系数据库管理系统会检查视图定义中的条件,若不满足条件则拒绝执行该操作。

a. 插入数据

[外链图片转存中...(img-YcgMjDSD-1648440785038)]

建表时添加了with check option, 会进行条件检查。表要求adept = ‘is’,插入的数据中adept = null,不符合视图规则,条件检查失败,拒绝插入数据。

Mysql中视图操作_第4张图片

b. 删除数据

Mysql中视图操作_第5张图片

视图数据来源相应数据也被删除

c. 更新数据

在原表中的数据也发生了更改

你可能感兴趣的:(mysql,mysql,sql)