oracle10g经典实战第3章_数据库的操作ppt课件_第1页
oracle10g经典实战第3章_数据库的操作ppt课件_第2页
oracle10g经典实战第3章_数据库的操作ppt课件_第3页
oracle10g经典实战第3章_数据库的操作ppt课件_第4页
oracle10g经典实战第3章_数据库的操作ppt课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章数据库的操作 3.1操作表数据 经过PL/SQL语句操作表数据比较方便、灵敏。一切SQL命令将在SQL*Plus中编译完成。进入SQL*Plus,用户名和密码分别为:ADMIN和manager。 3.1.1插入表记录 语法格式: INSERT INTO table_namecolumn_list VALUES(constant1,constant2,) 该语句的功能是向由table_name指定的表中参与一行,由VALUES指定的各列值。 (1) 在插入时,列值表必需与列名表顺序和数据类型一致。 (2) VALUES中描画的值可以是一个常量、变量或一个表达式。 (3) 假设列值为空,那么

2、值必需置为NULL。假设列值指定为该列的默许值,那么用DEFAULT。 (4) 在对表进展插入行时,假设新插入的行中一切可取空值的列值均取空值,那么就可以在INSERT语句中经过列表指出插入的行值中所包含非空的列,而在VALUES中只需给出这些列的值即可。.3.1.1插入表记录【例3.1】向XSCJ数据库的表XS中插入如下的一行:061101 王林 计算机 男 19870201 50可以运用如下的PL/SQL语句: INSERT INTO XS(XH,XM,ZYM,XB,CSSJ,ZXF) VALUES(061101,王林, 计算机,男,TO_DATE(19860210,YYYYMMDD),5

3、0);请读者运用INSERT INTO语句向学生表插入以下记录: 学号 姓名 专业名 性别 出生时间 总学分 备注061102 王平 计算机 女 1986-09-02 38 NULL061103王燕 计算机 女1985-10-06 40NULL061104韦严平 计算机 男1986-08-26 40NULL061105吴庆红计算机男1985-12-3036有两门不及格061106李方方 计算机 男1986-11-20 40NULL061107李明 计算机 男1986-05-01 40NULL061108林一帆 计算机 男1985-08-05 42已提早修完一门课061109张强民 计算机 男1

4、984-08-11 40NULL061110张蔚 计算机 女1987-07-22 40NULL061111赵琳 计算机 女1986-03-18 40NULL061112罗林琳 计算机 女1984-01-30 40NULL .3.1.1插入表记录用SELECT语句进展查询,可以发现表中曾经添加的记录,如图3.1所示。图3.1插入新数据后查询的结果.3.1.1插入表记录 【例3.2】建立了表test。 CREATE TABLE test ( xm char(20) NOT NULL, zy varchar(30) DEFAULT(计算机), nj number NOT NULL ); 用INSER

5、T向test表中插入一条记录: INSERT INTO test(xm,nj) VALUES(王林,3); 那么插入到test表中的记录为:王林 计算机 3 语法格式: INSERT INTO table_name derived_table derived_table是一个由SELECT语句查询所得到的结果集。利用该参数,可把一个表中的部分数据插入到表table_name中。.3.1.1插入表记录【例3.3】用如下的CREATE语句建立表XS1: CREATE TABLE XS1 ( num char(6) NOT NULL, name char(8) NOT NULL, speiality

6、 char(10) NULL );用如下的INSERT语句向XS1表中插入数据: INSERT INTO XS1 SELECT XH,XM,ZYM FROM XS WHERE ZYM=计算机;.3.1.1插入表记录 这条INSERT语句将XS表中专业名为计算机的各记录的学号、姓名和专业名列的值插入到XS1表的各行中。用SELECT语句可查看插入结果: num name speciality - - - 061101 王林 计算机 061102 王平 计算机 061103 王燕 计算机 061104 韦严平 计算机 061105 吴庆红 计算机 061106 李方方 计算机 061107 李明

7、计算机 061108 林一帆 计算机 061109 张强民 计算机 061110 张蔚 计算机 061111 赵琳 计算机 061112 罗林琳 计算机 从Oracle 10g开场新增了MERGE语句,运用这个语句可以实现对表的更新或插入。.3.1.1插入表记录 语法格式: MERGE INTO table_name USING table_name ON (join_condition) WHEN MATCHED THEN UPDATE SET WHEN NOT MATCHED THEN INSERT() VALUES() Joni_condition:衔接条件。 【例3.4】 检查表XS_

8、JSJ中的数据能否和表XS的数据相匹配,假设匹配那么运用INSERT子句执行插入数据行。 首先在表XS_JSJ运用INSERT语句添加一行数据: INSERT INTO XS_JSJ(XH,XM,ZYM,XB,CSSJ,ZXF) VALUES(101112,霍甲, 计算机,女,TO_DATE(19860130,YYYYMMDD),36); 运用MERGE语句XS_JSJ表中新增的数据插入表XS中: MERGE INTO XS a USING XS_JSJ b ON(a.XH=b.XH) WHEN NOT MATCHED THEN INSERT Values(b.xh,b.xm,b.zym,b.

9、xb,b.cssj,b.zxf,b.bz); 用SELECT语句进展查询,可以发现表中曾经添加一条姓名为霍甲的学生记录。 .3.1.2删除表记录 1. 运用 DELETE删除数据 在PL/SQL言语中,删除行可以运用DELETE语句。 语法格式: DELETE FROM table_nameview_name WHERE condition 该语句的功能为从table_name指定的表或view_name指定的视图中删除满足condition 查询条件的行,假设省略该条件,表示删除一切的行。 【例3.5】将XSCJ数据库的XS表中总学分小于39的行删除,运用如下的PL/SQL语句。 DELET

10、E FROM XS WHERE ZXF39; .3.1.2删除表记录 1. 运用 DELETE删除数据 用SELECT语句进展查询,可以发现表中学号为“061102和“061105两行已被删除,结果为: XH XM ZYM - - - 061101 王林 计算机 061103 王燕 计算机 061104 韦严平 计算机 061106 李方方 计算机 061107 李明 计算机 061108 林一帆 计算机 061109 张强民 计算机 061110 张蔚 计算机 061111 赵琳 计算机 061112 罗林琳 计算机.3.1.2删除表记录 2. 运用TRUNCATE TABLE语句删除表数据

11、 假设确实要删除一个大表里的全部记录, 可以用TRUNCATE命令, 它可以释放占用的数据块表空间。此操作不可回退。 语法格式: TRUNCATE TABLE table_name 其中table_name为要删除数据的表名。由于TRUNCATE TABLE语句删除表中的一切数据,且不能恢复,所以运用时要谨慎。 运用TRUNCATE TABLE删除了指定表中的一切行,但表的构造及其列、约束、索引等坚持不变。TRUNCATE TABLE在功能上与不带WHERE子句的DELETE语句一样,二者均删除表中的全部行。但TRUNCATE TABLE执行速度比DELETE快。 对于由外键(FOREIGN

12、KEY)约束援用的表不能运用TRUNCATE TABLE删除数据,而应运用不带WHERE子句的DELETE语句。另外,TRUNCATE TABLE也不能用于索引视图的表。.3.1.3修正表记录 在PL/SQL言语中,UPDATE语句可以用来修正表中的数据行。 语法格式: UPDATE table_nameview_name SET column_name=expression,n WHERE condition该语句table_name指定的表或view_name指定的视图中满足condition 查询条件的记录中由SET指定的各列的列值设置为SET指定的新值。假设不运用WHERE子句,那么更

13、新一切记录的指定列值。 【例3.6】 将XSCJ数据库的XS表中学号为“061110的学生备注列值改为“三好学生,运用如下PL/SQL语句: UPDATE XS SET BZ=三好学生 WHERE XH=061110;.3.1.3修正表记录 用SELECT语句进展查询,可以发现表中学号为“061110的行的备注字段值已被修正,如图3.2所示。图3.2修正数据以后的表.3.1.3修正表记录 【例3.7】将XS表中的一切学生的总学分都添加10。 UPDATE XS SET ZXF=ZXF+10; 用SELECT语句进展查询,可以发现表中一切学生的总学分都添加了10分,如图3.3所示。图3.3添加学

14、分后的数据.3.1.3修正表记录 【例3.8】将姓名为“罗林琳的同窗的专业改为“通讯工程,备注改为“转专业学习,学号改为“061241。 UPDATE XS SET ZYM= 通讯工程, BZ=转专业学习, XH= 061241 WHERE XM= 罗林琳; 【例3.9】对XS表进展修正,将姓名为“李明的学生的总学分加4,备注改为“提前修完,并获得学分。 UPDATE XS SET ZXF=ZXF+ 4, BZ= 提早修完,并获得学分 WHERE XM=李明;.3.2默许值约束 对于某些字段,可在程序中定义默许值以方便用户。定义一个字段的默许值可以在定义表或修正表时,定义默许值约束。 1. 默

15、许值约束的定义 在运用OEM或SQL命令定义表或修正表时,可定义一个字段的默许值约束。下面经过例子引见利用SQL语句定义一个字段的默许值约束的方法,有兴趣的读者可以练习一下在OEM中定义一个字段的默许值约束。 默许值约束定义的普通格式为:CREATE TABLE table_name (column_name datatype NOT NULL | NULL DEFAULT constraint_expression /*默许值约束的表达式*/ ,n) table_name为创建的表名;column_name为列名;datatype为对应列的数据类型;DEFAULT关键字表示其后的constr

16、aint_expression表达式为缺省值约束表达式,此表达式只能是常量如字符串、系统函数或 NULL;参数n表示可定义多个数据字段。 .3.2默许值约束 【例3.10】在定义表时定义一个字段的默许值约束。 CREATE TABLE XS ( 学号 char(6) NOT NULL, 姓名 char(8) NOT NULL, 专业名 char(10) NULL, 性别 char(2) NOT NULL, 出生时间 date NOT NULL, 总学分 number DEFAULT 0,/*定义默许值约束*/ 备注 varchar2(200) NULL ) 【例3.11】在修正表时定义一个字段

17、的默许值约束。 ALTER TABLE XS ADD(Addcolumn number(2) DEFAULT 0);.3.3索引 为什么在字典中进展查找时可以很快地找到要查的内容呢?主要缘由是字典中已按某种顺序进展了排序。 在Oracle 10g中,索引是一种供效力器在表中快速查找一个行的数据库构造。在数据库中建立索引主要有以下作用: (1) 快速存取数据; (2) 既可以改善数据库性能又可以保证列值的独一性; (3) 实现表与表之间的参照完好性; (4) 在运用ORDER BY、GROUP BY子句进展数据检索时,利用索引可以减少排序和分组的时间。.3.3索引3.3.1索引的分类 索引按存储

18、方法分类,可以分为2类:B*树索引和位图索引。 (1) B*树索引。B*树索引的存储构造类似书的索引构造,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引到的详细的书页。 (2) 位图索引。位图索引储存主要用来节省空间,减少ORACLE对数据块的访问,它采用位图偏移方式来与表的行ID号对应,采用位图索引普通是反复值太多的表字段。 索引按功能和索引对象还有以下类型: (1) 独一索引。独一索引意味着不会有两行记录一样的索引键值。 (2) 非独一索引。不对索引列的值进展独一性限制的所以称为非独一索引。 (3) 分区索引。所谓分区索引是指索引可以分散地存在于多个不同的表空间中,

19、其优点是可以提高数据查询的效率。 (4) 未排序索引。未排序索引也称为正向索引。Oracle 10g数据库中的行是按升序排序的,因此创建索引时不用指定对其排序而运用默许的顺序。 (5) 逆序索引。逆序索引也称为反向索引。该索引同样坚持索引列按顺序排列,但是颠倒已索引的每列的字节。 (6) 基于函数的索引。基于函数的索引是指索引中的一列或者多列是一个函数或者表达式,索引根据函数或者表达式计算索引列的值。 .3.3.2运用索引的原那么 在正确运用索引的前提下,索引可以提高检索相应的表的速度。当用户思索在表中运用索引时,应遵照以下一些根本的原那么: (1) 在表中插入数据后创建索引 (2) 索引正确

20、的表和列 (3) 合理安排索引列 (4) 限制表中索引的数量 (5) 指定索引数据块空间的运用 (6) 根据索引大小设置存储参数.3.3.3创建索引 创建索引有三种方法:随数据库表创建、运用Oracle 10g管理控制台工具单独创建和运用SQL命令创建索引。 1. 随数据库表一同创建索引在创建数据库表时,假设表中包含有独一关键字或主关键字,那么Oracle 10g自动为这两种关键字所包含的列建立索引。假设不特别指定,系统将默以为该索引定义一个名字。表建立之后,实践上就是在表XS的列XH上建立了一个索引,如图3.4所示。这种方法创建的索引是非排序索引,既正向索引,以B*树方式存储。 图3.4随数

21、据库表创建的索引.3.3.3创建索引 2. 在OEM中创建索引 【例3.11】为XS表的姓名列创建索引。 在如图3.5所示的界面中,在方案中选择“索引,鼠标单击左键,翻开如图3.4所示的“索引搜索界面。图3.5 Oracle企业管理器 .3.3.3创建索引 2. 在OEM中创建索引 在如图3.4所示界面,单击“创建按钮,进入如图3.6所示的界面。“创建索引窗口包含普通讯息、分区、存储、选项和统计信息5个选项页面。 图3.6创建索引 普通讯息选项界面 .3.3.3创建索引 2. 在OEM中创建索引 (1) “普通讯息选项页面。它可以设置以下信息: 称号:指定索引名。创建索引时指定一个有效的Ora

22、cle标识符。这里指定的索引名是XS_NAME_INDEX。 方案:单击“手电筒外形的按钮,翻开如图3.7所示的“搜索和选择方案界面。 图3.7搜索和选择方案界面 .3.3.3创建索引 2. 在OEM中创建索引 表空间:指定索引所属的表空间。 表名:指定哪个表创建索引。 索引类型:指定要创建的索引是规范索引还是位图索引。 表列:指定索引列和顺序。单击“置入列按钮,表列电子表格列出表XS一切的列。电子表格包含列名、数据类型、排序次序和顺序,由“顺序字段指定索引的列及其顺序。 (2) “存储选项选项页面。“存储选项页面如图3.8所示。在该界面指定存储参数。 事件记录:指示能否生成重做日志。 区数:

23、初始大小指定对象的第一个区的大小。 空间空闲: 区定义保管用于更新的空闲的百分比 事务处置数量:类别定义以下参数: 初始值:对象的每个数据块内分配的事务处置条目的初始数量。范围为1255。 最大值:可同时更新分配给对象的数据块的并行事务处置的最大值。范围为1255。 缓冲池:区定义经过“缓冲池下拉列表选择运用的缓冲池。可以选择的缓冲池包括KEEP、RECYCLE和DEFAULT。 .3.3.3创建索引图3.8创建索引存储选项界面 .3.3.3创建索引 2. 在OEM中创建索引 (3) “选项选项页面。“选项选项界面如图3.9所示。在该选项页面,可以指定如何执行并行查询、如何存储重做日志等信息。

24、 独一:该复选框指定表中将索引的列或列组合的值必需独一。 逆序:该复选框指定创建逆序从大到小关键字索引。 并行:该复选框可用于创建一个常规表或一个按索引组织的表,并以并行方式装载。该选项可指定并行执行某一操作。程度表示单个例程的操作并行度,并行度可以有两种设置: 默许值:查询效力器数量根据CPU数和存储要并行扫描的表的“设备数计算得出。 值:用户指定的查询效力器数量。 紧缩:是为了防止关键字列的值反复出现,可以大大减少存储空间。 执行选项:有3个复选框可以勾选设置: 联机:在创建或重建索引时,允许对表进展DML操作。 计算统计信息:在创建或重建索引时,以非常小的代价搜集统计信息。 不排序:阐明

25、存储在数据库中的数据按升序排序,所以创建索引时不对其进展排序。.3.3.3创建索引图3.9创建索引选项选项界面 .3.3.3创建索引 2. 在OEM中创建索引 (4) “分区选项页面。“分区选项界面如图3.10所示。 图3.10创建索引分区选项界面 .3.3.3创建索引 2. 在OEM中创建索引 对索引进展分区有2种方法: 全局范围:在运用范围分区的全局索引时, 每个索引分区都包含由分区边境定义的值。 全局散列:在运用散列分区的全局索引时, 每个索引分区都包含由 Oracle 的散列函数确定的值。 (5) 单击“统计信息选项页面,出现如图3.11所示的界面。该界面显示索引使用情况阐明。 .3.

26、3.3创建索引图3.11统计信息选项界面 .3.3.3创建索引 3. 利用SQL命令建立索引 运用SQL命令可以灵敏方便地创建索引。在运用SQL命令创建索引时,必需满足以下条件之一: (1) 索引的表或簇必需在本人的方式中; (2) 必需在要索引的表上具有INDEX权限; (3) 必需具有CREATE ANY INDEX权限。 语法格式: CREATE UNIQUEBITMAP INDEX /*索引类型*/ schema.index_name /*索引称号*/ ON schema.table_name(column_nameASCDESC,n,column_expression) /*索引建于

27、表*/ CLUSTER schema.cluster_name /*索引建于簇*/ INITRANS integer MAXTRANS integer PCTFREE integer PCTUSED integer /*建立索引的物理和存储特征值*/ TABLESPACE tablespace_name /*索引所属表空间*/ STORAGE storage_clause /*为索引建立存储特征*/ NOSORT REVERSE.3.3.3创建索引 3. 利用SQL命令建立索引 其中: UNIQUE:指定索引所基于的列(或多列)值必需独一。默许的索引是非独一索引。 BITMAP:指定建成位映射

28、索引而不是B*索引。 Schema:表示包含索引的方案。 ON table_name:建立table_name表索引。 column_expression:创建基于函数的索引。 ON CLUSTER:创建cluster_name簇索引。 NOSORT:数据库中的行以升序保管,在创建索引时不用对行排序。 REVERSE:指定以反序索引块的字节,不包含行标识符。 .3.3.3创建索引 【例3.12】为KC表的课程名列创建索引。 CREATE INDEX kc_name_idx ON KC(KCM) TABLESPACE INDX; 【例3.13】为XS表的姓名列创建索引,指定索引的物理和存储特征值

29、,数据库中的行以升序保管。 CREATE INDEX xs_xm_idx ON XS (XM) TABLESPACE INDX INITRANS 2 MAXTRANS 255 NOSORT;.3.3.4维护索引 1. 在OEM中维护索引 在OEM中维护索引的操作,除了一些特殊的信息不能再修正,其他与创建索引的操作相同。 在如图3.4所示的界面中,选择要维护的索引,单击“编辑按钮,进入“编辑索引界面,如图3.12所示。在各个选项页面上重新指定相应的设置,确认无误后,单击“运用按钮,完成修正。图3.12维护索引 .3.3.4维护索引 2. 利用ALTER INDEX命令维护索引 语法格式: ALT

30、ER INDEX schema.index_name INITRANS integer MAXTRANS integer PCTFREE integer /*建立索引的物理和存储特征值*/ STORAGE storage_clause /*为索引建立存储特征*/ RENAME TO new_index_name 【例3.14】修正例3.12中创建的索引kc_name_idx。 ALTER INDEX admin.xs_name_index INITRANS 2 MAXTRANS 128; 【例3.15】重命名索引kc_name_idx。 ALTER INDEX kc_name_idx RENA

31、ME TO kc_idx;.3.3.5删除索引 索引的删除既可以经过OEM删除,也可以经过执行SQL命令删除。 1. 利用OEM删除索引 在如图3.4所示的界面中,选中要删除的索引,单击“删除,系统弹出确认界面,单击“是按钮后,就胜利删除该索引了。 2. 利用SQL命令删除索引 语法格式: DROP INDEX schema.index_name 其中,schema是包含索引的方案。index_name是要删除的索引称号。 【例3.16】删除XSCJ数据库中表XS的一个索引名为XS_NAME_IDX的索引。 DROP INDEX XS_NAME_IDX;.3.4同义词 3.4.1创建同义词 1

32、. 利用OEM创建同义词 【例3.17】为本地数据库XSCJ的表XS创建同义词XS。 如图3.5所示,在OEM中,选择方案选项中的同义词,单击鼠标左键,进入“同义词搜索界面,如图3.13所示。单击“创建按钮,进入“创建同义词界面,如图3.14所示。图3.13同义词搜索界面 图3.14创建同义词界面 .3.4.1创建同义词 2. 利用CREATE SYNONYM命令创建同义词 语法格式: CREATE PUBLIC SYNONYM schema.synonym_name FOR schema.object dblink 【例3.18】创建同义词。 (1) 为XSCJ数据库的XS_KC表创建公用同

33、义词XS_KC。 CREATE PUBLIC SYNONYM XS_KC FOR ADMIN.XS_KC; (2) 为XSCJ数据库XS表创建远程数据库同义词。 CREATE PUBLIC SYNONYM XS FOR ADMIN.XSMY_LINK; (3) 为XSCJ数据库的CS_XS视图创建公用同义词CS_XS。 CREATE PUBLIC SYNONYM CS_XS FOR ADMIN.CS_XS;.3.4.2运用同义词 一旦创建同义词后,数据库的用户就可以直接经过同义词称号访问该同义词所指的数据库对象,而不需求特别指出该对象的所属关系。 【例3.19】SYSTEM用户查询XSCJ数据

34、库XS表中一切学生的情况。SELECT * FROM XS; 假设没有为XSCJ数据库XS表创建同义词XS,那么SYSTEM用户查询XS表那么需指定XS表的一切者。SELECT * FROM ADMIN.XS;.3.4.3删除同义词 1. 利用OEM删除同义词 在如图3.13所示的“同义词搜索界面中,在搜索栏输入搜索条件,单击“开场按钮查找要删除的同义词后,选中要删除的同义词,单击“删除,在出现的“确认界面,单击“是按钮后,就能删除该同义词。 2. 利用DROP SYNONYM命令删除同义词 语法格式: DROP PUBLIC SYNONYM schema.synonym_name 阐明: P

35、UBLIC阐明删除一个公用同义词。Schema指定将要删除的同义词的用户方案。synonym_name为将要删除的同义词称号。 【例3.20】删除公用同义词CS_XS。DROP PUBLIC SYNONYM CS_XS;.3.5数据库链接 3.5.1 创建数据库链接 1. 利用OEM创建数据库链接 【例3.21】利用OEM创建数据库链接MY_LINK。 (1) 如图3.15所示,在企业管理中选择单击“数据库链接,进入如图3.16所示的“数据库链接搜索界面。 图3.15 Oracle企业管理器 图3.16数据库链接搜索界面.3.5.1 创建数据库链接 1. 利用OEM创建数据库链接(2)单击“创

36、建按钮,进入“创建数据库链接界面,如图3.17所示。 图3.17创建数据库链接界面.3.5.1 创建数据库链接 1. 利用OEM创建数据库链接 (3) 单击“确定按钮,创建胜利后,系统前往到图3.16所示的界面,完成数据库链接操作。 2. 利用CREATE DATABASE LINK命令创建数据库链接 语法格式: CREATE PUBLIC DATABASE LINK dblink_name CONNECT TO user IDENTIFIED BY password USING connect_string 【例3.22】为XSCJ数据库创建一个名为MY_PLINK的公用链接。 CREATE

37、 PUBLIC DATABASE LINK MY_PLINK CONNECT TO ADMIN IDENTIFIED BY MANAGE USING XSCJ;.3.5.2运用数据库链接 创建了数据库链接,就可以运用远程数据库的对象了。 【例3.23】查询远程数据库XSCJ表KC中的一切课程情况。 SELECT * FROM ADMIN.KCMY_PLINK;上述查询将经过MY_PLINK数据库链接来访问KC表,也可以为该表创建一个同义词。 【例3.24】为XSCJ远程数据库表KC创建一个同义词。 CREATE PUBLIC SYNONYM KC FOR ADMIN.KC MY_PLINK;

38、这时数据库对象的全限定标志已被定义,其中包括经过效力名的主机和实例、经过数据库链接的拥有者(ADMIN)和表名(KC)。 .3.5.3删除数据库链接 1. 利用OEM删除数据库链接 在如图3.16所示的窗口中,选择要删除的数据库链接,单击“删除按钮,在出现的“确认界面,单击“是按钮后,就能胜利删除该数据库链接。 2. 利用DROP DATABASE LINK删除数据库链接 语法格式: DROP DATABASE LINK dblink_name dblink_name为要删除的数据库链接称号。 【例3.25】删除公用数据库链接MY_PLINK。 DROP DATABASE LINK MY_PL

39、INK; 留意:公用数据库链接可由任何有相应权限的用户删除,而私有数据库链接只能由SYS系统用户删除。.3.6数据完好性 Oracle运用完好性约束防止不合法的数据进入到基表中。管理员和开发人员可以定义完好性规那么,以加强商业规那么,限制数据表中的数据。 运用完好性约束有以下几个益处: (1) 在数据库运用的代码中加强了商业规那么。 (2) 运用存储过程,完好控制对数据的访问。 (3) 加强了触发存储数据库过程的商业规那么。 3.6.1数据完好性的分类 1. 域完好性 域完好性又称为列完好性,指定一个数据集对某一个列能否有效和确定能否允许空值。 .3.6.1数据完好性的分类 【例3.26】定义

40、表KC的同时定义学分的约束条件。 CREATE TABLE KC ( KCH char(6) NOT NULL, KCM char(8) NOT NULL, XF NUMBER(2) CHECK (总学分=0 AND总学分=0 AND CJ=100,单击“确定按钮,完成CHECK约束的创建,系统前往到图3.19所示界面,单击“运用保管上述操作。 图3.20添加CHECK约束条件界面.3.6.3域完好性的实现 (2) 利用SQL语句在创建表时创建CHECK约束 语法格式: CREATE TABLE table_name /*指定表名*/ ( column_name datatype NOT NU

41、LL | NULL DEFAULT constraint_expression /*默许值*/ CONSTRAINT check_name CHECK(check_expression),n) /*CHECK约束表达式*/ 【例3.27】在 XSCJ 数据库中创建表books,其中包含一切的约束定义。 CREATE TABLE books ( book_id number(10), book_name varchar2(50) not null, book_desc varchar2(50) DEFAULT New book, max_lvl number(3,2) not null, tra

42、de_price number(4,1) not null, CONSTRAINT ch_cost CHECK(max_lvl=250);.3.6.3域完好性的实现 (3) 利用SQL语句在修正表时创建CHECK约束 语法格式: ALTER TABLE table_name ADD( CONSTRAINT check_name CHECK(check_expression) 【例3.28】经过修正XSCJ数据库的books表,添加零售价字段trade_price的CHECK约束。 ALTER TABLE books ADD( CONSTRAINT ch_price CHECK(trade_pr

43、ice=250); (4) 利用SQL语句删除CHECK约束 CHECK约束的删除可在OEM中删除,有兴趣的读者可以本人试一试,在此介绍如何利用SQL命令删除。 语法格式: ALTER TABLE table_name DROP CONSTRAINT check_name 功能:在table_name指定的表中,删除名为check_name的约束。 【例3.29】删除XSCJ数据库中books表零售价字段的CHECK约束。 ALTER TABLE books DROP CONSTRAINT ch_price;.3.6.4实体完好性的实现 如前所述,表中应有一个列或列的组合,其值能独一地标识表中

44、的每一行,选择这样的一列或多列作为主键可实现表的实体完好性。 一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能取空值。由于 PRIMARY KEY 约束能确保数据的独一,所以经常用来定义标识列。当为表定义PRIMARY KEY约束时,Oracle 10g为主键列创建独一索引,实现数据的独一性,在查询中运用主键时,该索引可用来对数据进展快速访问。假设 PRIMARY KEY 约束是由多列组合定义的,那么某一列的值可以反复,但 PRIMARY KEY 约束定义中一切列的组合值必需独一。 PRIMARY KEY约束与UNIQUE约束的主要区别如下: (1)

45、 一个数据表只能创建一个PRIMARY KEY约束,但一个表中可根据需求对不同的列创建假设干个UNIQUE约束; (2) PRIMARY KEY字段的值不允许为NULL,而UNIQUE字段的值可取NULL;PRIMARY KEY约束与UNIQUE约束的一样点在于:二者均不允许表中对应字段存在反复值;在创建PRIMARY KEY约束与UNIQUE约束时会自动产生索引。 .3.6.4实体完好性的实现 对于PRIMARY KEY约束与UNIQUE约束来说,都是由索引强迫实现。在实现PRIMARY KEY约束与UNIQUE约束时,Oracle按照下面过程来实现: (1) 假设制止该约束,那么不创建索引

46、。 (2) 假设约束是允许的,且约束中的列是某个索引的一部分,那么该索援用来强迫约束。 (3) 假设约束是允许的,且约束中的列都不是某个索引的一部分,那么按照下面的规那么创建索引: 假设约束是可延迟的,那么在这种约束的列上创建一个非独一性索引。 假设约束是非可延迟的,那么创建一个独一性索引。 1. 利用OEM创建和删除PRIMAY KEY或UNIQUE约束 利用OEM创建和删除PRIMAY KEY或UNIQUE约束的操作过程同利用OEM创建和删除CHECK约束根本一样,独一的区别是在选择约束类型时选择PRIMAY KEY或UNIQUE约束,详细操作请参照利用OEM创建和删除CHECK约束。 .

47、3.6.4实体完好性的实现2.利用SQL语句创建和删除PRIMAY KEY及UNIQUE约束(1) 创建表的同时创建PRIMAY KEY或UNIQUE约束语法格式:CREATE TABLE table_name /*指定表名*/(column_name datatype /*定义字段*/CONSTRAINT constraint_name /*定义约束名*/NOT NULLPRIMARY KEY | UNIQUE /*定义约束类型*/,n) /*n表示可定义多个字段*/在语法格式中,经过关键字PRIMARY KEY、UNIQUE阐明所创建的约束类型。 .3.6.4实体完好性的实现 2. 利用S

48、QL语句创建和删除PRIMAY KEY及UNIQUE约束 【例3.30】对XSCJ数据库中XS表的学号字段创建PRIMARY KEY约束,对身份证号码字段定义UNIQUE约束。 CREATE TABLE XS ( XH char(6) NOT NULL CONSTRAINT PK_XH PRIMARY KEY, XM char(8) NOT NULL, INDENTITY char(20) CONSTRAINT UN_ID UNIQUE, ZYM char(10) NULL, XB char(2) NOT NULL, CSSJ ldate NOT NULL, ZXF number(2) NUL

49、L, BZ varchar2(100) NULL, RXSJ date );.3.6.4实体完好性的实现2. 利用SQL语句创建和删除PRIMAY KEY及UNIQUE约束 (2) 利用修正表创建PRIMAY KEY或UNIQUE约束 语法格式: ALTER TABLE table_name ADD( CONSTRAINT constraint_name PRIMARY KEY(column_name,n)阐明:这是创建PRIMAY KEY约束,ADD CONSTRAINT表示对table_name表添加一个约束,约束名由constraint_name指定,约束类型为PRIMARY KEY。索

50、引字段由column_name参数指定,可包含一列或多列。语法格式: ALTER TABLE table_name ADD(CONSTRAINT constraint_name UNIQUE(column_name,n)这是创建UNIQUE约束。 .3.6.4实体完好性的实现 【例3.31】 先在XSCJ数据库中创建表XS,然后经过修正表,对学号字段创建PRIMARY KEY约束,对身份证号码字段定义UNIQUE约束。 CREATE TABLE XS ( XH char(6) NOT NULL, XM char(8) NOT NULL, INDENTITY char(20), ZYM char

51、(10) NULL, XB char(2) NOT NULL, CSSJ date NOT NULL, ZXF number(2) NULL, BZ varchar2(100) NULL, RXSJ date ); ALTER TABLE XS ADD(CONSTRAINT PK_XS PRIMARY KEY(XH); ALTER TABLE XS ADD(CONSTRAINT UN_XS UNIQUE(INDENTITY);.3.6.4实体完好性的实现2. 利用SQL语句创建和删除PRIMAY KEY及UNIQUE约束(3)删除PRIMARY KEY或UNIQUE约束语法格式: ALTER TABLE table_name DROP CONSTRAINT constraint_name,n;【例3.32】删除创建的UN_XS的UNIQUE约束。 ALTER TABLE XS DROP CONSTRAINT UN_XS;.3.6.5参照完好性的实现 对两个相关联的表(主表与从表)进展数据插入和删除时,经过参照完好性保证它们之间数据的一致性。利用FORE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论