索引视图序列同义词锁文档格式.docx

上传人:b****6 文档编号:21561871 上传时间:2023-01-31 格式:DOCX 页数:13 大小:94.70KB
下载 相关 举报
索引视图序列同义词锁文档格式.docx_第1页
第1页 / 共13页
索引视图序列同义词锁文档格式.docx_第2页
第2页 / 共13页
索引视图序列同义词锁文档格式.docx_第3页
第3页 / 共13页
索引视图序列同义词锁文档格式.docx_第4页
第4页 / 共13页
索引视图序列同义词锁文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

索引视图序列同义词锁文档格式.docx

《索引视图序列同义词锁文档格式.docx》由会员分享,可在线阅读,更多相关《索引视图序列同义词锁文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

索引视图序列同义词锁文档格式.docx

可以使用wait子句对锁的等待时间控制。

如:

在另一用户中:

select*fromempwheredeptno=30forupdatewait2

(等待2秒,如2秒钟还未释放资源,系统将会给出提示信息)

Ofcolumn用于多表连接的时候,通过columns来确定到底锁哪些表。

要写表实际的列名,写别名无效。

3.1.2表级锁

表级锁将保护表数据,在事务处理过程中,表级锁会限制对整个表的访问。

可以使用LOCKTABLE语句显式地锁定表。

表级锁用来限制对表执行插入、更新和删除等修改操作。

表级锁的锁定模式有:

A:

共享模式(insharemode)

B:

共享更新模式(inshareupdatemode)

C:

排他锁模式(inexclusivemode)

锁定表的通用语法:

1)共享模式(insharemode)

不允许其他用户插入、更新和删除行,多个用户可以同时在同一表上设置共享锁,这样设置锁的多个用户都只能执行查询。

locktableempinsharemode;

2)共享更新模式(inshareupdatemode)

允许多个用户同时锁定表的不同行,允许其他用户进行DML(insertupdatedeleteselect)操作,除了已锁定的行。

locktableempinshareupdatemode;

select*fromempwheredeptno=30forupdate//锁定的行

其他用户不能delete,update部门30的雇员信息,但其它行可以更新。

其他用户可以查看锁定的行:

select*fromempwheredeptno=30

3)排他锁模式(限制性强)

不允许其他用户插入,更新和删除行,但允许查看数据。

只有一个用户可以在表中放置排他锁。

locktableempinexclusivemode;

4.1同义词

同义词是数据库对象的一个别名。

通过使用同义词,用户可以访问其它用户模式下的数据库对象而无需指定模式前缀。

同义词具有以下用途:

●简化SQL语句

●隐藏对象的名称和所有者

注意:

同义词不能代替权限,在使用同义词之前要确保用户已得到访问该对象的权限。

同义词的分类:

●私有同义词

●公有同义词

1:

私有同义词:

私有同义词只能被当前模式的用户访问。

用户要在自身的模式下创建私有同义词,则用户必须拥有CREATESYNONYM系统权限。

例一:

SQL>

grantcreatesynonymtosunjob;

grantallonemptosunjob;

createsynonymempforscott.emp;

2:

公有同义词:

公有同义词可被所有的数据库用户访问。

公有同义词可以隐藏基表的身份,并降低SQL语句的复杂性。

要创建公有同义词,用户必须拥有

CREATEPUBLICSYNONYM系统权限。

例二:

grantcreatepublicsynonymtosunjob;

grantallonemptosunjob

createpublicsynonymempforscott.emp;

3:

删除同义词:

DROPSYNONYM语句用于从数据库中删除同义词。

要删除同义词,用户必须拥有相应的删除权限。

grantdropanysynonymtosunjob;

dropsynonymemp;

4.2序列

序列是用来生成唯一、连续的整数的数据库对象。

序列通常用来生成主键或唯一键的值。

序列可以按升序排列,也可以按降序排列。

语法如下:

1:

访问序列:

创建序列之后,可以通过CURRVAL和NEXTVAL伪列来访问序列的值。

可以从伪列中选择值,但是不能操纵它们的值。

●NEXTVAL:

创建序列后第一次使用时,只能使用它。

以后每次增长一个新值。

●CURRVAL:

返回序列的当前值。

例一:

2:

更改序列:

ALTERSEQUENCE命令用于修改序列的定义。

序列可以修改的地方为:

●设置或删除MINVALUE或MAXVALUE

●修改增量值

●修改缓存中的序列号的数目

●Startwith不能够修改

删除序列:

DROPSEQUENCE命令用于删除序列。

SQL>

dropsequenceseq_flowid;

4.3视图

视图以经过定制的方式显示包含在一个或多个表(或视图)中的数据。

视图获取查询的输出结果,并将其作为表来处理,因此,可以将视图视为“已存储的查询”或“虚拟表”。

在可以使用表的大多数场合都可以使用视图。

创建视图所依据的表称为“基表”。

视图具有以下优点:

Ø

通过限制对表中预定的一组行和列的访问。

视图隐藏了数据的复杂性。

视图简化了用户的SQL命令。

创建视图的语法如下:

CREATE[ORREPLACE][FORCE]VIEW

view_name[(alias[,alias]...)]

ASselect_statement

[WITHCHECKOPTION]

[WITHREADONLY];

4.3.1:

创建视图

示例1:

(基于顾员表而创建的视图)

一:

所有列

createorreplaceviewvwEMPasselect*fromemp;

二:

选择列

createorreplaceviewvwEMPas

selectempno,ename,sal,deptnofromemp;

三:

选择记录

selectempno,ename,sal,deptnofromempwheresal>

=2000;

示例2:

(WITHCHECKOPTION)

该选项限定了所创建的视图对基依据的基表数据的修改。

只有在视图中存在的记录,且修改后的记录依然能显示在视图中的记录才能被更新。

createorreplaceviewvwEMPas

=2000

withcheckoption;

以上视图如果按以下的更新方式将会出现:

NG

updatevwEMPsetsal=1500whereempno=7788;

 

OK

updatevwEMPsetsal=3500whereempno=7788;

示例3:

(WITHREADONLY)

此选项确保不能通过该视图去修改其所依据的基表数据。

select*fromempwithreadonly;

示例4:

(ORDERBY)

select*fromemporderbysal;

示例5:

(FORCE/NOFORCE)

该选项用于当创建视图时,如果其所依据的基表不存在或引用了表中无效的字段列,再或者没有所需的权限,而强制执行创建视图。

这样创建出来的视图是不可使用的,但随后可以补建视图所依据的基表,这时对视图进行重编一下即可。

createorreplaceforceviewvwEMPas

select*fromMYEMPorderbysal;

//MYEMP表不存在

select*fromvwEMP;

//不能访问操作

createtableMYEMPasselect*fromemp;

//补建基表

select*fromvwEMP;

//可以访问了

或:

alterviewvwEMPcompile;

//重新编译视图

4.3.2:

DML语句在视图中的应用

如果一个视图基于单个基表,那么可以在此视图中进行INSERT/UPDATE/

DELETE操作,这些操作实际上是在其基表中进行。

在视图上使用DML语句有如下限制(相对于表):

只能修改一个底层的基表

如果修改违反了基表的约束条件,则无法更新视图

如果视图包含连接操作符、DISTINCT关键字、集合操作符、聚合函数或GROUPBY子句,则将无法更新视图

如果视图包含伪列或表达式,则将无法更新视图

4.3.3:

联接视图

联接视图是在FROM子句中指定多个表或视图而创建的视图。

在联接视图中使用DML语句只能修改单个基表,如果修改多个基表,SQL就会显示错误。

基于些,ORACLE提供了视图上的“INSTEADOF触发器”,使用该触发器,可以通过视图同时对多个基表执行DML操作,详见第八章内容。

◆联接可分为内联接和外联接

(内联接):

从两个表中选择匹配的行

selecta.empno,a.ename,a.deptno,b.empno,b.ename,b.deptno

fromAAa,BBbwherea.deptno=b.deptno;

//或写成如下方式也可:

fromAAainnerjoinBBbona.deptno=b.deptno;

(外联接):

允许用户从一个表中选择所有的行并从另一个表中选择匹配的行(又分为左外联接和右外联接)

左外联接:

左边表的所有记录+右边表的匹配行记录

fromAAa,BBbwherea.deptno=b.deptno(+);

fromAAaleftouterjoinBBbona.deptno=b.deptno;

右外联接:

左边表的匹配行记录+右边表的所有记录

fromAAa,BBbwherea.deptno(+)=b.deptno;

//或写成如下方式也可:

fromAAarightouterjoinBBbona.deptno=b.deptno;

4.3.4:

键保留表

在联接视图中,如果视图包含了一个表的主键,且也是这个视图的主键,则这个表称为键保留表,ORACLE可以通过此视图向表中插入行。

通过数据字典视图USER_UPDATABLE_COLUMNS,可以确定联接视图中可更新的列。

select*fromuser_updatable_columns

wheretable_name='

vwEMP'

;

4.3.5:

删除视图

如果要删除视图,可以使用DROPVIEW命令。

dropviewvwEMP;

可以通过查询USER_VIEWS数据字典视图来获得用户所创建的视图信息。

select*fromuser_views;

4.4索引

索引是与表关联的一种可选数据库对象。

可以明确地创建索引,以加快对表执行SQL语句的速度。

合理地使用索引是减少磁盘I/O的主要方法。

索引只是一种快速访问数据的途径,它只影响执行的速度。

可以使用createindex命令在表的一列或若干列的组合上创建索引。

createindexindex_nameontable_name(column_list)

[tablespacetablespace_name];

创建索引时,ORACLE将获得要创建索引的列,并对其进行排序。

然后,将ROWID与其索引值存储起来。

索引在逻辑上和物理上都独立于关联表中的数据。

在任何时候都可以创建或删除索引,而不会影响基表或其它索引。

如果删除索引,所有的应用程序都将继续运行,但在访问原先被索引的数据时,速度可能会降低。

与视图不同的是,索引是独立的结构,因此需要存储空间。

一旦创建了索引,ORACLE会自动维护和使用它们。

只要修改了数据,ORACLE都会自动更新相关的索引。

4.4.1:

索引的分类

·

索引是与表相关的一个可选结构

用以提高SQL语句执行的性能

减少磁盘I/O

在逻辑上和物理上都独立于表的数据

Oracle自动维护索引

唯一索引

索引可以是唯一的,也可以是非唯一的。

唯一索引可以确保在定义索引的列中,表的任意两行的值都不相同。

ORACLE自动为表的主键列创建唯一索引。

可以使用createuniqueindex命令明确地创建唯一索引。

createuniqueindexno_indexonemp(empno);

//主键列

组合索引

组合索引是在表中的多个列上创建的索引。

组合索引中列的顺序是任意的,不必是表中相邻的列。

如果在SQL语句的条件句中引用了组合索引中的所有列或大多数列,则组合索引可以提高数据检索的速度。

在创建索引时,应注意定义中的列的顺序。

通常,最频繁访问的列应放置在列表的最前面。

createindexcomp_indexonemp(empno,deptno);

反向键索引

反向键索引是一种特殊类型的索引,在索引基于大量有序数的列时非常有用。

反向键索引通过简单的反向被索引的列中的数据来解决问题,首先反向每个列键值的字节,然后在反向后的新数据上进行索引,而新数据在值的范围上的分布比原来的有序数更均匀。

可以在createindex语句中指定关键字reverse创建反向键索引。

createindexnum_indexontbtemp(itemcode)reverse;

123451154321

123452254321

123453354321

123454454321

使用关键字NOREVERSE可以将反向键索引重建为标准索引,反之不行。

alterindexnum_indexrebuildnoreverse;

位图索引

使用位图索引的优点在于,它最适用于低基数列,也就是不同值的数目比表的行数少的列。

如果某个列的值重复了一百次,则可以考虑在该列上创建位图索引。

可以使用createbitmapindex命令来创建位图索引。

createbitmapindexbit_indexonorder_detail(itemcode);

位图索引不应当在频繁发生DML操作的表上。

基于函数的索引

有时,可能要在条件子句中使用表达式及函数。

如果在该表达式和函数中用到了某个列,而该列上是有索引的,则ORACLE不会应用该列上的索引。

为了方便此类操作,且使基于该列有索引可用,ORACLE提供了一个选项,允许基于一个表达式或函数创建索引。

在创建此类基于表达式或函数的索引时,该表达式不能包含任何聚合函数,也不能在LOB列、REF列或包含LOB或REF的对象类型上创建基于函数的索引。

(基于函数)

createindexvn_indexonvendor_master(upper(venname));

(基于表达式)

createindexvn_indexonitemtb(qty_num*itemrate);

(应用)

select*fromvendor_masterwhereupper(venname)='

SMALL'

要创建基于函数或表达式的索引,必须具有queryrewrite系统权限。

4.4.2:

索引组织表

索引组织表与普通表的不同之处在于,该表的数据存储在与其关联的索引中。

对表数据进行的修改,只会导致对索引的更新。

索引组织表适合于通过主键来访问数据。

与唯一索引一样,索引组织表没有重复的键值。

可以使用带有organizationindex子句的createtable命令来创建索引组织表。

createtableindex_tb

vencodenumber(4)primarykey,

vennamevarchar2(20)

organizationindex;

//primarykey是创建索引组织表所必需的

索引组织表与在一个或多个列上建立索引的普通表相似,但它无需为表和索引维护两个单独的存储空间。

⏹普通表与索引组织表的比较

4.4.3:

索引中的分区

与对表进行分区类似,ORACLE也允许对索引分区。

与表分区一样,索引分区可以存储在不同的表空间中。

索引的分区有下面几种类型:

索引分区类型:

分区索引(局部分区索引+全局分区索引)

(局部分区索引):

局部分区索引是在分区表上创建的一种索引,在局部分区索引中,ORACLE为表的每个表分区建立一个独立的索引。

通过在createindex语句中指定local属性,可以在表分区上创建局部索引。

步骤一:

创建分区表

createtableorder_mast

ordernonumber(4),

partitionbyrange(orderno)

partitionoe1valueslessthan(1000),

partitionoe2valueslessthan(2000),

partitionoe3valueslessthan(maxvalue)

);

步骤二:

在分区表上创建局部索引

createindexpart_indexonorder_mast(orderno)local;

步骤三:

插入相应数据信息

insertintoorder_mastvalues(100,'

AAAA'

insertintoorder_mastvalues(900,'

BBBB'

insertintoorder_mastvalues(1500,'

CCCC'

insertintoorder_mastvalues(2500,'

DDDD'

insertintoorder_mastvalues(3000,'

EEEE'

步骤四:

查看局部索引分区信息

通过查询名为“user_segments”的数据字典视图,可以了解相关信息

selectsegment_name,partition_name,

segment_type,tablespace_name

fromuser_segmentswheresegment_name='

PART_INDEX'

(全局分区索引):

全局分区索引是指在分区表或非分区表上创建的索引。

createindexglo_indexonorder_mast(orderno)global

partitionip1valueslessthan(1500),

partitionip2valueslessthan(maxvalue)

※不能在散列分区或子分区建立全局索引。

非分区索引

非分区索引是指在分区表上创建的全局索引,它类似于在非分区表上的索引,索引的结构不会被分割。

4.4.4:

删除索引

如果要删除索引,可以使用DROPINDEX命令。

dropindexindex_name;

查询索引信息

可以通过查询USER_INDEXS数据字典视图来获得用户所创建的索引信息。

select*fromuser_indexes;

select*fromuser_ind_partitions;

select*fromuser_ind_columns;

select*fromuser_ind_expressions;

select*fromuser_ind_subpartitions;

建立索引需要为表的1.2倍的硬盘空间和内存,所以索引不是越多越好,而且维护起来也很影响效率,所以对于有些不经常查询的字段,逻辑型字段不要建立索引,索引一般是针对数据量很大的表

平时我们建立的索引是B-tree索引:

createindexindex_nameontable_name(column_name);

重建索引

比如说某张表从默认的表空间移动到了另一个表空间,要重建索引

alterindexindex_namerebuild;

删除索引

dropindexindex_name;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1