表 视图 等Word格式文档下载.docx
- 文档编号:20942222
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:16
- 大小:23.10KB
表 视图 等Word格式文档下载.docx
《表 视图 等Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《表 视图 等Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
创建索引一般要掌握以下原则:
只有较大的表才有必要建立索引,表的记录应该大于50条,查询数据小于总行数的2%~4%。
虽然可以为表创建多个索引,但是无助于查询的索引不但不会提高效率,还会增加系统开销。
因为当执行DML操作时,索引也要跟着更新,这时索引可能会降低系统的性能。
一般在主键列或经常出现在WHERE子句或连接条件中的列建立索引,该列称为索引关键字。
索引的创建
创建索引不需要特定的系统权限。
建立索引的语法如下:
CREATE[{UNIQUE|BITMAP}]INDEX索引名ON表名(列名1[,列名2,...]);
其中:
UNIQUE代表创建惟一索引,不指明为创建非惟一索引。
BITMAP代表创建位图索引,如果不指明该参数,则创建B*树索引。
列名是创建索引的关键字列,可以是一列或多列。
删除索引的语法是:
DROPINDEX索引名;
删除索引的人应该是索引的创建者或拥有DROPANYINDEX系统权限的用户。
索引的删除对表没有影响。
创建和删除索引。
步骤1:
创建索引:
CREATEINDEXEMP_ENAMEONEMP(ENAME);
执行结果:
索引已创建。
步骤2:
查询中引用索引:
SELECTENAME,JOB,SALFROMEMPWHEREENAME='
SCOTT'
;
ENAMEJOBSAL
---------------------------------------------------
SCOTTANALYST3000
步骤3:
删除索引:
DROPINDEXEMP_ENAME;
索引已丢弃。
说明:
本例创建的是B*树非惟一简单索引。
索引关键字列是ENAME。
在步骤2中,因为WHERE条件中出现了索引关键字,所以查询中索引会被自动引用,但是由于行数很少,因此不会感觉到查询速度的差别。
创建复合索引。
创建复合索引:
CREATEINDEXEMP_JOBSALONEMP(JOB,SAL);
SELECTENAME,JOB,SALFROMEMPWHEREJOB='
MANAGER'
ANDSAL>
2500;
----------------------------------------------------
BLAKEMANAGER2850
CLARKMANAGER2850
JONESMANAGER2975
在本例中创建的是包含两列的复合索引。
JOB是主键,SAL是次键。
WHERE条件中引用了JOB和SAL,而且是按照索引关键字出现的顺序引用的,所以在查询中,索引会被引用。
如下的查询也会引用索引:
CLERK'
但以下查询不会引用索引,因为没有先引用索引关键字的主键:
SELECTENAME,JOB,SALFROMEMPWHERESAL>
查看索引
通过查询数据字典USER_INDEXES可以检查创建的索引。
通过查询数据字典USER_IND_COLUMNS可以检查索引的列。
显示emp表的索引:
SELECTINDEX_NAME,INDEX_TYPE,UNIQUENESSFROMUSER_INDEXESWHERETABLE_NAME='
EMP'
INDEX_NAME
-----------------------------------------------------------------------------------------------------------------
EMP_JOBSALNORMALNONUNIQUE
PK_EMPNORMALUNIQUE
由本训练可见,emp表共有两个索引,其中EMP_JOBSAL是刚刚创建的,属于非惟一索引。
PK_EMP为生成主键时系统创建的索引,属于惟一索引。
显示索引的列。
SELECTCOLUMN_NAMEFROMUSER_IND_COLUMNS
WHEREINDEX_NAME='
EMP_JOBSAL'
COLUMN_NAME
--------------------------------------------------------------------------------
JOB
SAL
该查询显示出索引“EMP_JOBSAL”拥有两列:
JOB和SAL。
序列的创建
序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。
其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
创建序列需要CREATESEQUENCE系统权限。
序列的创建语法如下:
CREATESEQUENCE序列名
[INCREMENTBYn]
[STARTWITHn]
[{MAXVALUEn|NOMAXVALUE}]
[{MINVALUEn|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHEn|NOCACHE}];
INCREMENTBY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。
STARTWITH定义序列的初始值(即产生的第一个值),默认为1。
MAXVALUE定义序列生成器能产生的最大值。
选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;
对于递减序列,最大值是-1。
MINVALUE定义序列生成器能产生的最小值。
选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?
10的26次方;
对于递增序列,最小值是1。
CYCLE和NOCYCLE表示当序列生成器的值达到限制值后是否循环。
CYCLE代表循环,NOCYCLE代表不循环。
如果循环,则当递增序列达到最大值时,循环到最小值;
对于递减序列达到最小值时,循环到最大值。
如果不循环,达到限制值后,继续产生新值就会发生错误。
CACHE(缓冲)定义存放序列的内存块的大小,默认为20。
NOCACHE表示不对序列进行内存缓冲。
对序列进行内存缓冲,可以改善序列的性能。
删除序列的语法是:
DROPSEQUENCE序列名;
删除序列的人应该是序列的创建者或拥有DROPANYSEQUENCE系统权限的用户。
序列一旦删除就不能被引用了。
序列的某些部分也可以在使用中进行修改,但不能修改SATRTWITH选项。
对序列的修改只影响随后产生的序号,已经产生的序号不变。
修改序列的语法如下:
ALTERSEQUENCE序列名
创建和删除序列。
创建序列:
CREATESEQUENCEABCINCREMENTBY1STARTWITH10MAXVALUE9999999NOCYCLENOCACHE;
序列已创建。
删除序列:
DROPSEQUENCEABC;
序列已丢弃。
以上创建的序列名为ABC,是递增序列,增量为1,初始值为10。
该序列不循环,不使用内存。
没有定义最小值,默认最小值为1,最大值为9999999。
序列的使用
如果已经创建了序列,怎样才能引用序列呢?
方法是使用CURRVAL和NEXTVAL来引用序列的值。
调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名,即用以下方式调用:
序列名.NEXTVAL
CURRVAL用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。
如果序列还没有通过调用NEXTVAL产生过序列的下一个值,先引用CURRVAL没有意义。
调用CURRVAL的方法同上,要指出序列名,即用以下方式调用:
序列名.CURRVAL.
产生序列的值。
产生序列的第一个值:
SELECTABC.NEXTVALFROMDUAL;
NEXTVAL
------------------
10
产生序列的下一个值:
-------------------
11
产生序列的当前值:
SELECTABC.CURRVALFROMDUAL;
CURRVAL
--------------------
第一次调用NEXTVAL产生序列的初始值,根据定义知道初始值为10。
第二次调用产生11,因为序列的步长为1。
调用CURRVAL,显示当前值11,不产生新值。
序列的应用:
产生图书序列号。
CREATESEQUENCEBOOKIDINCREMENTBY1STARTWITH10MAXVALUE9999999NOCYCLENOCACHE;
使用序列生成新的图书编号:
INSERTINTO图书VALUES('
A'
||TO_CHAR(BOOKID.NEXTVAL,'
fm0000'
),'
多媒体制作'
'
INSERTINTO图书VALUES(‘A’||TO_CHAR(BOOKID.NEXTVAL,‘fm0000’),‘网页制作精选’,‘01’,‘刘莹’,4,26.50);
执行结果:
已创建1行。
步骤2:
显示插入结果:
<
prename="
code"
class="
sql"
>
SELECT*FROM图书;
<
/pre>
br>
图书图书名称出作者数量单价
----------------------------------------------------------------------------------------------------------
01'
高建'
3,28.00);
A0001计算机原理01刘勇525.3
A0002C语言程序设计02马丽118.75
A0003汇编语言程序设计02黄海明1520.18
A0005软件工程01冯娟527.3
A0010多媒体制作01高建328
A0011网页制作精选01刘莹426.5
根据序列定义可知,序列产生的初始值为10,函数TO_CHAR将数字10转换为字符。
格式字符串“fm0000”表示转换为4位的字符串,空位用0填充。
fm表示去掉转换结果的空格。
故10将被转换成为字符串“0010”。
连接运算后的图书编号为“A0010”。
第二次调用则产生“A0011”,以此类推。
注意:
通过查询看到插入的序号是连续的,但如果在插入的过程中使用了回退或发生了系统崩溃等情况,可能会产生序号的间隔。
查看序列
同过数据字典USER_OBJECTS可以查看用户拥有的序列。
通过数据字典USER_SEQUENCES可以查看序列的设置。
【训练1】查看用户的序列:
SELECTSEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBERFROM
USER_SEQUENCES;
SEQUENCE_NAMEMIN_VALUEMAX_VALUEINCREMENT_BYLAST_NUMBER
-------------------------------------------------------------------------------------------------------------------------
ABC19999999112
BOOKID19999999112
说明:
当前用户拥有两个序列:
ABC和BOOKID。
同义词:
模式对象的同义词
同义词(SYNONYM)是为模式对象起的别名,可以为表、视图、序列、过程、函数和包等数据库模式对象创建同义词。
同义词有两种:
公有同义词和私有同义词。
公有同义词是对所有用户都可用的。
创建公有同义词必须拥有系统权限CREATEPUBLICSYNONYM;
创建私有同义词需要CREATESYNONYM系统权限。
私有同义词只对拥有同义词的账户有效,但私有同义词也可以通过授权,使其对其他用户有效。
同义词通过给本地或远程对象分配一个通用或简单的名称,隐藏了对象的拥有者和对象的真实名称,也简化了SQL语句。
如果同义词同对象名称重名,私有同义词又同公有同义词重名,那么,识别的顺序是怎样的呢?
如果存在对象名,则优先识别,其次识别私有同义词,最后识别公有同义词。
比如,执行以下的SELECT语句:
SELECT*FROMABC;
如果存在表ABC,就对表ABC执行查询语句;
如果不存在表ABC,就去查看是否有私有同义词ABC,如果有就对ABC执行查询(此时ABC是另外一个表的同义词);
如果没有私有同义词ABC,则去查找公有同义词;
如果找不到,则查询失败。
同义词的创建和使用
同义词的创建语法如下:
CREATE[PUBLIC]SYNONYM同义词名
FOR[模式名.]对象名[@数据库链路名];
PUBLIC代表创建公有同义词,若省略则代表创建私有同义词。
模式名代表拥有对象的模式账户名。
数据库链路名是指向远程对象的数据库链接。
删除同义词的语法如下
DROPSYNONYM同义词名;
删除同义词的人必须是同义词的拥有者或有DROPANYSYNONYM权限的人。
删除同义词不会删除对应的对象。
创建同义词
创建私有同义词:
CREATESYNONYMBOOKFOR图书;
同义词已创建。
创建公有同义词(先要获得创建公有同义词的权限):
CREATEPUBLICSYNONYMBOOKFORSCOTT.图书;
使用同义词:
SELECT* FROMBOOK;
------------------------------------------------------------------------------------------------
对“BOOK”的查询等效于对“图书”的查询。
如果同义词只是用户自己使用,则对象名前的模式名可以省略,如步骤1。
如果是为其他用户使用,则必须添加模式名,如步骤2。
同义词的查看
通过查询数据字典USER_OBJECTS和USER_SYNONYMS,可以查看同义词信息。
查看用户拥有的同义词:
SELECTOBJECT_NAMEFROM USER_OBJECTSWHEREOBJECT_TYPE='
SYNONYM'
OBJECT_NAME
BOOK
QHBOOK
系统定义同义词
系统为常用的对象预定义了一些同义词,利用它们可以方便地访问用户的常用对象。
这些同义词如下所示。
DICTDICTIONARY数据字典
CATUSER_CATALOG用户拥有的表、视图、同义词和序列
CLUUSER_CLUSTERS用户拥有的聚簇
INDUSER_INDEXES用户拥有的索引
OBJUSER_OBJECTS用户拥有的对象
SEQUSER_SEQUENCES用户拥有的序列
SYNUSER_SYNONYMS用户拥有的私有同义词
COLSUSER_TAB_COLUMNS用户拥有的表、视图和聚簇的列
TABSUSER_TABLES用户拥有的表
查看用户拥有的表:
SELECTTABLE_NAMEFROMTABS;
TABLE_NAME
------------------------------
BONUS
DEPT
EMP
聚簇
所谓聚簇(CLUSTER),形象地说,就是生长在一起的表。
聚簇包含一张或多张表,表的公共列被称为聚簇关键字,在公共列上具有同一值的列物理上存储在一起。
那么在什么情况下需要创建聚簇呢?
通常在多个表有共同的列时,应使用聚簇。
比如有一张学生基本情况表,其中包含学生的学号、姓名、性别、住址等信息。
另外,还设计了一张学生成绩表,其中除了包含学生成绩,也包含学生的学号、姓名、性别。
那么这两张表共同的列就可以创建成聚簇。
这样两张表的共同的学号、姓名和性别,就存放在了一起,相同的值只存放一次。
如果两个表通过聚簇列进行联合,则会大大提高查询的速度,但对于插入等操作则会降低效率。
创建聚簇后,要创建使用聚簇的表,对聚簇还应该建立索引。
如果不对聚簇建立索引,则不能对聚簇表进行插入、修改和删除操作。
创建聚簇需要CREATECLUSTER系统权限。
创建聚簇的语法如下:
CREATECLUSTER聚簇名(列名1[,列名2]...)
SIZEn
TABLESPACE表空间名;
列名是构成聚簇关键字的列集合。
SIZE指明存储所有含有相同聚簇关键字的行的平均存储空间数(聚簇逻辑块的大小)。
TABLESPACE定义聚簇使用的表空间。
删除聚簇使用如下语法:
DROPCLUSTER聚簇名[INCLUDINGTABLES[CASCADECONSTRAINTS]];
INCLUDINGTABLES表示一同删除聚簇表。
如果不指明此选项,则必须手工删除聚簇表后才能删除聚簇本身。
CASCADECONSTRAINTS表示删除聚簇表时,一起删除同其他表之间的约束关系。
创建和使用聚簇。
创建聚簇:
CREATECLUSTERCOMM(STUNONUMBER(5),STUNAMEVARCHAR2(10),SEXVARCHAR2
(2))
SIZE500
TABLESPACEUSERS;
已创建数据簇。
创建第一张聚簇表:
CREATETABLESTUDENT(
STUNONUMBER(5),
STUNAMEVARCHAR2(10),
SEXVARCHAR2
(2),
ADDRESSVARCHAR2(20),
E_MAILVARCHAR2(20)
)
CLUSTERCOMM(STUNO,STUNAME,SEX);
表已创建。
创建第
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 视图
![提示](https://static.bdocx.com/images/bang_tan.gif)