plsql 对视图加索引吗_数据

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

此博客共享SQL语言视图操作-详细实用研究报告(如屏幕截图所示)

软件:Oracle SQL Developer?

目录

1,学生课程数据库

2.视图

①定义视图

②查询视图

③更新视图

④视图的作用

(与以前相比,我做了一些修改,以扩展以下做法)

plsql 对视图加索引吗_plsql 对视图加索引吗_02

plsql 对视图加索引吗_oracle 查询视图变更_03

plsql 对视图加索引吗_oracle 查询视图变更_04

1.视图是从一个或几个基本表(或视图)派生的表。

2.视图是一个虚拟表:即,仅视图的定义存储在数据库中,而不存储与尝试相对应的数据。这些数据仍存储在原始基本表中。因此,一旦基本表中的数据更改,从视图中查询的数据也将更改。

3.一旦定义了视图,就可以像基本表一样对其进行查询和删除。您也可以在视图表上定义另一个视图,但是对视图的更新(添加,删除,更改)操作有某些限制。

1,创建视图

1.1。 SQL语言使用create view命令创建视图,其中子查询可以是任何select语句

组成视图的属性列名称已指定或省略,没有第三选择。如果省略,则视图由子查询中select子句的目标列中的字段隐式组成,但是在以下三种情况下,必须显式指定构成该视图的所有列名:

1)目标列不是简单的属性名称,而是聚合函数或列表达式;

2)当连接多个表时,将选择几个具有相同名称的字段作为视图;

3)您需要为视图中的列启用一个新的更合适的名称。

1.2。行和列子集视图:视图是从单个基本表派生的,仅删除了基本表的某些行和某些列,但保留了主要代码,因此这种类型的视图称为行和列Set视图。

视图不仅可以建立在一个或多个基本表上,还可以建立在一个或多个已定义的视图上,或者建立在基本表和视图上。

通常不存储通过各种计算从基本数据派生的数据,因此在定义视图时,可以根据应用程序的需要设置一些派生的属性列。这些派生的属性列也称为虚拟列,因为它们实际上不存在于基本表中。

具有虚拟列的视图也称为具有表达式的视图。

您可以将查询与聚合函数和group by子句一起使用来定义视图。该视图称为分组视图。

1.3。最佳:修改基本表后,删除从该表派生的视图,然后重新构建视图。

1.4。删除基本表后,将无法再使用从该表导出的所有视图!但是,视图的定义尚未从字典中删除。要删除定义,请显式使用drop view语句。

1.4。练习

1)首先,必须授予用户在授权用户中创建视图的权限,否则直接创建视图时将出现执行错误:显示权限不足!

plsql 对视图加索引吗_数据_05

2)接下来,您可以创建一系列视图,例如特定的操作:(有关详细信息,请参见注释)

plsql 对视图加索引吗_字段_06

plsql 对视图加索引吗_字段_07

plsql 对视图加索引吗_数据库_08

3)删除视图(不带级联的Oracle)

1,视图分辨率:当关系数据库系统对视图执行查询时,第一个有效性别检查,检查查询中涉及的表和视图是否存在,如果存在,则从数据字典中获取视图的定义,并将子查询和用户查询放入定义中组合在一起,将转换为对基本表的等效查询,然后执行修改后的查询。

请注意,聚合函数不能在where子句中用作条件表达式。

当前,大多数关系数据库系统都可以正确转换行和列子集视图的查询,但是可能无法转换非行和列子集视图的查询。

2.定义视图并查询基于派生表的视图与查询之间的差异:

1)定义视图后,在删除视图之前,其定义将始终保存在数据字典中,并且所有后续查询都可以直接引用该视图;

2)派生表这是在执行语句时临时定义的,并在执行语句后删除该定义。

3.练习

plsql 对视图加索引吗_数据_09

plsql 对视图加索引吗_数据_10

1.更新视图:是指通过视图插入,删除和更新数据。

由于视图是实际上并不存储数据的虚拟表,因此对视图的更新最终将转换为对基本表的更新。 (例如查询视图)

2.并非所有视图都是可更新的。例如,由上述学生ID和平均成绩定义的视图S_G。

通常,行和列子集视图是可更新的。另外,有些观点在理论上是可更新的,而某些观点在理论上是不可更新的。

当前,所有关系数据库管理系统通常只允许更新行和列子集视图,并且每个系统都有用于更新视图的进一步规定。

例如,DB2提供:

(1)如果视图是从两个以上的基本表派生的,则不允许更新该视图;

(2)如果视图的字段来自字段表达式或常量,则不允许对此视图进行插入和更新操作,但允许删除操作;

(3)如果视图的字段来自聚合函数,则不允许更新视图;

(4)如果视图定义包含group by子句,则不允许更新该视图。

(5)如果视图的定义包含不同的短语,则不允许更新视图;

(6)如果视图定义中有嵌套查询,并且内部查询的from子句中涉及的表也是导出视图的基本表,则不允许更新该视图。

例如,将得分高于sc表中平均得分的元组定义为视图GOOD_SC:(GOOD_SC不允许更新)>

plsql 对视图加索引吗_数据库_11

(7)在不允许更新的视图上定义的视图也不允许被更新(注意:不可更新的视图和不允许更新的视图是两个不同的概念) 。

3.练习

plsql 对视图加索引吗_oracle 查询视图变更_12

在此处注意:插入后,无法通过IS_student表找到该学生记录。查询学生表显示已经存在一个学生记录,性别和部门均为空,即系统不会自动将部门名称设置为” IS”,而是默认为NULL!如果在创建视图时添加带有检查选项,则执行该语句时将显示错误,并且无法插入!

(不同系统之间应该存在差异)

plsql 对视图加索引吗_字段_13

plsql 对视图加索引吗_plsql 对视图加索引吗_14

合理使用视图可以带来好处!

1,视图可以简化用户的操作:用户所做的只是查询虚拟表而不了解虚拟表的来源。

2,视图允许用户从多个角度查看相同的数据:当许多不同类型的用户共享同一数据库时,这种灵活性很重要!

3.视图为重构数据库提供了一定程度的逻辑独立性。

数据的物理独立性:用户的应用程序不依赖于数据库的物理结构。

数据的逻辑独立性:当重建数据库时,例如添加新关系或向原始关系添加新字段,用户的应用程序将不会受到影响。

重建数据库的最常见方法是将一个基本表”垂直”分为多个基本表,例如:学生关系

尽管数据库的逻辑结构已更改(更改为SX和SY表),但是应用程序不需要更改,因为新创建的视图被定义为用户的原始关系,因此用户的外部模式保持不变,应用程序仍可以通过视图查找数据!

视图只能在一定程度上提供数据独立性。例如,由于视图的更新是有条件的,由于基本表结构的更改,可能仍需要修改在应用程序中修改数据的语句。

4.视图可以为机密数据提供安全保护:为不同的用户定义不同的视图,以便每个用户只能看到他有权查看数据,以使查看机制自动为机密数据提供安全保护。