第3章数据库的操作.ppt

上传人:towelfact221 文档编号:388516 上传时间:2018-10-12 格式:PPT 页数:67 大小:301KB
下载 相关 举报
第3章数据库的操作.ppt_第1页
第1页 / 共67页
第3章数据库的操作.ppt_第2页
第2页 / 共67页
第3章数据库的操作.ppt_第3页
第3页 / 共67页
第3章数据库的操作.ppt_第4页
第4页 / 共67页
第3章数据库的操作.ppt_第5页
第5页 / 共67页
亲,该文档总共67页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、2018年10月12日,第1页,第3章数据库的操作,教学目标 1.掌握对表中数据的操作 2.掌握索引的创建与维护 3.掌握同义词的创建与使用 4.理解数据完整性,2018年10月12日,第2页,教学目标,1.理解数据完整性 2.掌握表数据的操作 3.掌握索引与同义词 的创建与使用,2018年10月12日,第3页,3.1操作表数据,3.1.1向表中输入数据 创建表后,下一步就是要对其进行数据输入。 Oracle数据库中数据输入的方法有以下几种:1.用INSERT INTO VALUES语句直接向原表插入数据,2018年10月12日,第4页,语法格式:INSERT INTO table_namec

2、olumn_listVALUES(constant1,constant2,)该语句的功能是向由table_name指定的表中加入一行,由VALUES指定的各 列值。(1) 在插入时,列值表必须与列名表顺序和数据类型一致。 (2) VALUES中描述的值可以是一个常量、变量或一个表达式。 (3) 如果列值为空,则值必须置为NULL。如果列值指定为该列的默认值,则用DEFAULT。 (4) 在对表进行插入行时,若新插入的行中所有可取空值的列值均取空值,则 就可以在INSERT语句中通过列表指出插入的行值中所包含非空的列,而在 VALUES中只要给出这些列的值即可。,2018年10月12日,第5页,

3、【例3.1】向XSCJ数据库的表XS中插入如下的一行:061101 王林 计算机 男 19870201 50 可以使用如下的PL/SQL语句:INSERT INTO XS(XH,XM,ZYM,XB,CSSJ,ZXF) VALUES(061104, 王林3, 计算机, 男,TO_DATE(19860210,YYYYMMDD),50);,2018年10月12日,第6页,【例3.2】建立了表test。CREATE TABLE test(xm char(20) NOT NULL,zy varchar(30) DEFAULT(计算机),nj number NOT NULL);用INSERT向test表中

4、插入一条记录:INSERT INTO test(xm,nj)VALUES(王林,3);则插入到test表中的记录为:王林 计算机 3,2018年10月12日,第7页,2.用查询语句从一个表向另一个表插入一批行 【例3.3】用如下的CREATE语句建立表XS1:CREATE TABLE XS1( num char(6) NOT NULL,name char(8) NOT NULL,speiality char(10) NULL); 用如下的INSERT语句向XS1表中插入数据:INSERT INTO XS1SELECT XH,XM,ZYMFROM XSWHERE ZYM=计算机;,2018年10

5、月12日,第8页,从Oracle 10g开始新增了MERGE语句,使用这 个语句可以实现对表的更新或插入。 语法格式:MERGE INTO table_nameUSING table_name ON (join_condition)WHEN MATCHED THEN UPDATE SETWHEN NOT MATCHED THEN INSERT() VALUES()Joni_condition:连接条件。,2018年10月12日,第9页,【例3.4】 检查表XS_JSJ中的数据是否和表XS的数据相匹配,如果匹配则使用 INSERT子句执行插入数据行。首先在表XS_JSJ使用INSERT语句添加一

6、行数据:INSERT INTO XS_JSJ(XH,XM,ZYM,XB,CSSJ,ZXF,bz) VALUES(101112, 霍甲, 计算机, 女,TO_DATE(19860130, YYYYMMDD),36, 已修完);使用MERGE语句XS_JSJ表中新增的数据插入表XS中:MERGE INTO XS aUSING XS_JSJ bON(a.XH=b.XH)WHEN NOT MATCHED THEN INSERTValues(b.xh,b.xm,b.zym,b.xb,b.cssj,b.zxf,b.bz);用SELECT语句进行查询,可以发现表中已经增加一条姓名为霍甲的学生记录。,2018

7、年10月12日,第10页,3.1.2删除表记录,1. 使用 DELETE删除数据在PL/SQL语言中,删除行可以使用DELETE语句。语法格式:DELETE FROM table_nameview_nameWHERE condition该语句的功能为从table_name指定的表或view_name指定的视图中删除满足condition 查询条件的行,若省略该条件,表示删除所有的行,2018年10月12日,第11页,【例3.5】将XSCJ数据库的XS表中总学分小于39的行删除,使用如下的PL/SQL 语句。DELETE FROM XSWHERE ZXF39;,2018年10月12日,第12页,

8、2. 使用TRUNCATE TABLE语句删除表数据如果确实要删除一个大表里的全部记录, 可以用TRUNCATE命令, 它可以释放 占用的数据块表空间。此操作不可回退。语法格式:TRUNCATE TABLE table_name其中table_name为要删除数据的表名。由于TRUNCATE TABLE语句删除表 中的所有数据,且不能恢复,所以使用时要谨慎。,2018年10月12日,第13页,TRUNCATE TABLE在功能上与不带WHERE子句 的DELETE语句相同,二者均删除表中的全部行。 但TRUNCATE TABLE执行速度比DELETE快。对于由外键(FOREIGN KEY)约束

9、引用的表不能使 用TRUNCATE TABLE删除数据。另外, TRUNCATE TABLE也不能用于索引视图的表。,2018年10月12日,第14页,3.1.3修改表记录,语法格式:UPDATE table_nameview_nameSET column_name=expression,nWHERE condition 该语句table_name指定的表或view_name指定的视 图中满足condition 查询条件的记录中由SET指定的 各列的列值设置为SET指定的新值。若不使用WHERE 子句,则更新所有记录的指定列值。,2018年10月12日,第15页,【例3.6】 将XSCJ数据库

10、的XS表中学号为“061101”的学生备注列值改为“三好学生”,使用如下PL/SQL语句:UPDATE XSSET BZ=三好学生WHERE XH=061101;,2018年10月12日,第16页,例3.7】将XS表中的所有学生的总学分都增加10。UPDATE XSSET ZXF=ZXF+10;,2018年10月12日,第17页,【例3.8】将姓名为“罗林琳”的同学的专业改为“通信工程”,备注改为“转专业学习”,学号改为“061241”。UPDATE XSSET ZYM= 通信工程,BZ=转专业学习,XH= 061241WHERE XM= 王林;,2018年10月12日,第18页,【例3.9】

11、对XS表进行修改,将姓名为“李明”的学生的总学分加4,备注改为“提前修完数据结构,并获得学分”。UPDATE XSSET ZXF=ZXF+ 4,BZ= 提前修完数据结构,并获得学分WHERE XM=李明;,2018年10月12日,第19页,3.3.3 SQL*plus编辑器的编辑命令,在SQL*PLUS中键入SQL命令时,Oracle将在缓冲区中保留最后一次执行的命令(可能是一行,也可能是多行),这样,如果命令输入错误,可以对缓冲区中的命令进行编辑再执行,不用重新输入原来的命令。SELECT XH,XM,ZYMFROM XSWHERE ZYM=计算机;,2018年10月12日,第20页,1.L

12、ist命令,1)list命令列出缓冲区内容 SQLl 2)执行下面语句,列出第2行缓冲区内容。同时第2行变成当前行。 SQLl 2 3)执行下面语句,列出第2行到第3行间的缓冲区内容。SQLl 2 3 4)*表示当前行,在list命令中可以使用这个符号,执行下面命令来列出当前行。 SQLl *,2018年10月12日,第21页,也可以和数字组合使用,执行下面命令来显示从第2行到当前行 SQLl 2 * 5)last,表示最后一行 SQLl 2 last,2018年10月12日,第22页,2.append命令,功能:向当前行追加内容。 例: 先选中第一行为当前行,如下所示: SQLl 1 然后,

13、追加XB列: SQLa,XB SQLl SQL/,2018年10月12日,第23页,3.Change 命令,用此命令可以替换当前行的一部分,也可全部替换。 SQLc/计算机/ 通信工程/ 4. Input命令 这个命令可以在当前行后面插入一个新行。 SQLI and XB =男 5.del命令 此命令用来删除一行,如不带参数,则删除当前行。 SQLdel 6. SQLclear screen 清空当前屏幕。,2018年10月12日,第24页,3.2 索引,在oracle 10g 中索引是一种供服务器在表中快速查找一个行的数据库结构。,2018年10月12日,第25页,3.2.1索引的分类,索引

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

15、间 中,其优点是可以提高数据查询的效率。(4) 未排序索引。未排序索引也称为正向索引。Oracle 10g数据库中的行是按 升序排序的,因此创建索引时不必指定对其排序而使用默认的顺序。 (5) 逆序索引。逆序索引也称为反向索引。该索引同样保持索引列按顺序排 列,但是颠倒已索引的每列的字节。(6) 基于函数的索引。基于函数的索引是指索引中的一列或者多列是一个函数 或者表达式,索引根据函数或者表达式计算索引列的值。,2018年10月12日,第26页,3.2.2使用索引的原则,在正确使用索引的前提下,索引可以提高检索相应的表的 速度。当用户考虑在表中使用索引时,应遵循下列一些基本的原则:(1) 在表

16、中插入数据后创建索引(2) 索引正确的表和列(3) 合理安排索引列(4) 限制表中索引的数量,2018年10月12日,第27页,3.3.3创建索引,创建索引有三种方法:随数据库表创建、使用 Oracle 10g管理控制台工具单独创建和使用SQL 命令创建索引。,2018年10月12日,第28页,1.随数据库表一起创建索引在创建数据库表时,如果表中包含有关键字,则 Oracle 10g自动为关键字所包含的列建立索引。 如果不特别指定,系统将默认为该索引定义一个 名字。这种方法创建的索引是非排序索引,既正 向索引,以B*树形式存储。,2018年10月12日,第29页,2. 在OEM中创建索引【例3

17、.11】为XS表的姓名列创建索引。,2018年10月12日,第30页,3. 利用SQL命令建立索引使用SQL命令可以灵活方便地创建索引。在使用SQL命令创建索引时,必须满足下列条 件之一:(1) 索引的表或簇必须在自己的方案中;(2) 必须在要索引的表上具有INDEX权限;(3) 必须具有CREATE ANY INDEX权限。,2018年10月12日,第31页,创建索引的SQL命令语法格式如下所示:CREATE INDEX 索引名称ON 表名(字段名称1, 字段名称2)TABLESPACE 表空间INITRANS integerMAXTRANS integerNOSORTREVERSE,201

18、8年10月12日,第32页,【例3.12】为KC表的课程名列创建索引。CREATE INDEX kc_name_idxON KC(KCM) TABLESPACE USERS;【例3.13】为XS表的姓名列创建索引,指定索引的物理和存储特征值,数据库中的行以升序保存。CREATE INDEX xs_xm_idxON XS (XM)TABLESPACE “INDX“ INITRANS 2 MAXTRANS 255 NOSORT;,2018年10月12日,第33页,3.3.4维护索引,在OEM中维护索引在OEM中维护索引的操作,除了一些特殊的信 息不能再修改,其他与创建索引的操作相同。,2018年1

19、0月12日,第34页,2. 利用ALTER INDEX命令维护索引语法格式:ALTER INDEX schema.index_nameINITRANS integerMAXTRANS integerPCTFREE integer /*建立索引的物理和存储特征值*/STORAGE storage_clause /*为索引建立存储特征*/RENAME TO new_index_name,2018年10月12日,第35页,【例3.14】修改例3.12中创建的索引kc_name_idx。ALTER INDEX XM_inxINITRANS 2 MAXTRANS 128;【例3.15】重命名索引kc_n

20、ame_idx。ALTER INDEX XM_INXRENAME TO kc_idx;,2018年10月12日,第36页,3.3.5删除索引,索引的删除既可以通过OEM删除,也可以通过执行SQL命令删除。1. 利用OEM删除索引在如图3.4所示的界面中,选中要删除的索引,单击“删除”,系统弹出确认界 面,单击“是”按钮后,就成功删除该索引了。2. 利用SQL命令删除索引语法格式:DROP INDEX index_name其中,schema是包含索引的方案。index_name是要删除的索引名称。【例3.16】删除XSCJ数据库中表XS的一个索引名为XS_NAME_IDX的索引。DROP IND

21、EX XS_NAME_IDX;,2018年10月12日,第37页,3.3同义词,3.4.1创建同义词1. 利用OEM创建同义词【例3.17】为表XS创建同义词XS。,2018年10月12日,第38页,2. 利用CREATE SYNONYM命令创建同义词语法格式:CREATE PUBLIC SYNONYM schema.synonym_nameFOR schema.object dblink【例3.18】创建同义词。(1) 为XSCJ数据库的XS_KC表创建公用同义词XS_KC。CREATE PUBLIC SYNONYM XS_KCFOR SYSTEM.KC;(2) 为XSCJ数据库XS表创建远

22、程数据库同义词。CREATE PUBLIC SYNONYM XSFOR ADMIN.XSMY_LINK;,2018年10月12日,第39页,3.4.2使用同义词,一旦创建同义词后,数据库的用户就可以直接通过同义词名称访问该同义词所 指的数据库对象,而不需要特别指出该对象的所属关系。【例3.19】SYSTEM用户查询XSCJ数据库XS表中所有学生的情况。SELECT * FROM XS;如果没有为XSCJ数据库XS表创建同义词XS,那么SYSTEM用户查询XS表则 需指定XS表的所有者。SELECT * FROM ADMIN.XS;,2018年10月12日,第40页,3.4.3删除同义词,1.

23、利用OEM删除同义词在如图3.13所示的“同义词搜索”界面中,在搜索栏输入搜索条件,单击“开始” 按钮查找要删除的同义词后,选中要删除的同义词,单击“删除”,在出现的“确 认”界面,单击“是”按钮后,就能删除该同义词。2. 利用DROP SYNONYM命令删除同义词语法格式:DROP PUBLIC SYNONYM schema.synonym_name说明:PUBLIC表明删除一个公用同义词。Schema指定将要删除的同义词的用户方 案。synonym_name为将要删除的同义词名称。【例3.20】删除公用同义词CS_XS。DROP PUBLIC SYNONYM CS_XS;,2018年10月

24、12日,第41页,3.5数据库链接,1. 利用OEM创建数据库链接【例3.21】利用OEM创建数据库链接MY_LINK。,2018年10月12日,第42页,2. 利用CREATE DATABASE LINK命令创建数据库链接语法格式:CREATE PUBLIC DATABASE LINK dblink_nameCONNECT TO user IDENTIFIED BY passwordUSING connect_string【例3.22】为XSCJ数据库创建一个名为MY_PLINK的公用链接。CREATE PUBLIC DATABASE LINK MY_PLINKCONNECT TO ADMI

25、N IDENTIFIED BY MANAGEUSING XSCJ;,2018年10月12日,第43页,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;这时数据库对象的全限定标志已被定义,其中包括通过服务名的主机和实例、

26、通过数据库链接的拥有者(ADMIN)和表名(KC)。,2018年10月12日,第44页,3.5.3删除数据库链接,1. 利用OEM删除数据库链接在如图3.16所示的窗口中,选择要删除的数据库链接,单击“删除”按钮,在出 现的“确认”界面,单击“是”按钮后,就能成功删除该数据库链接。2. 利用DROP DATABASE LINK删除数据库链接语法格式:DROP DATABASE LINK dblink_namedblink_name为要删除的数据库链接名称。【例3.25】删除公用数据库链接MY_PLINK。DROP DATABASE LINK MY_PLINK;注意:公用数据库链接可由任何有相应

27、权限的用户删除,而私有数据库链接只 能由SYS系统用户删除。,2018年10月12日,第45页,3.6数据完整性,Oracle使用完整性约束防止不合法的数据进入到 基表中。管理员和开发人员可以定义完整性规则, 限制数据表中的数据。3.6.1数据完整性的分类1. 域完整性域完整性又称为列完整性,指定一个数据集对某一个列是否有效和确定是否允许空值。,2018年10月12日,第46页,2. 实体完整性实体完整性也可以称为行完整性,要求表中的每一行有一个唯一的标识符,这个标识符就是主关键字。3. 参照完整性参照完整性又可以称为引用完整性。参照完整性保证主表中的数据与从表(被参照表)中数据的一致性。主键

28、:在表中能唯一标识表的每个数据行的一个或多个表列。 外键:如果一个表中的一个字段或若干个字段的组合是另一个表的主键则称该字段或字段组合为该表的外键。,2018年10月12日,第47页,3. 参照完整性 例如,对于XSCJ数据库中XS表的每一个学号,在 XS_KC表中都有相关的课程成绩记录,将XS作为主表,学号字段定义为主键,XS_KC作为从表,表中的学号字段定义为外键,从而建立主表和从表之间的联系实现参照完整性。XS和XS_KC表的对应关系如表3.1、3.2所示。如果定义了两个表之间的参照完整性,则要求:(1) 从表不能引用不存在的键值。(2) 如果主表中的键值更改了,那么在整个数据库中,对从

29、表中该键值的所有 引用要进行一致的更改。(3) 如果主表中没有关联的记录,则不能将记录添加到从表。(4) 如果要删除主表中的某一记录,应先删除从表中与该记录匹配的相关记录。,2018年10月12日,第48页,2018年10月12日,第49页,表3.3描述了不同类型的完整性约束。,2018年10月12日,第50页,3.6.2约束的状态,在Oracle中,完整性约束有4种状态:(1) 禁止的非校验状态。表示该约束是不起作用的,即使该约束定义依然存储在数据字典。(2) 禁止的校验状态。表示对约束列的任何修改都是禁止的。(3) 允许的非校验状态或强制状态。该状态可以向表中添加数据,但是与约束有冲突的数

30、据不能添加。 (4) 允许的校验状态。表示约束处于正常的状态。这时,表中所有的数据,无论是已有的还是新添加的,都必须满足约束条件。,2018年10月12日,第51页,设置约束有两种方法: 1.利用(OEM)方法 2.利用SQL语句方法,3.6.3设置约束,2018年10月12日,第52页,1.利用(OEM)方法,1.域完整性的实现 Oracle可以通过CHECK约束实现域完整性.CHECK约束 实际上是字段输入内容的验证规则,表示一个字段的输入 内容必须满足CHECK约束的条件;若不满足,则数据无 法正常输入。 1.通过Oracle企业管理创建与删除CHECK约束 在XSCJ数据库的XS_KC

31、表中,学生每门功课的成绩一般 在0100的范围内,,2018年10月12日,第53页,(2) 利用SQL语句在创建表时创建CHECK约束语法格式: CREATE TABLE 表名(列名 datatype NOT NULL | NULLDEFAULT constraint_expression CONSTRAINT check_name CHECK(check_expression),n),2018年10月12日,第54页,【例3.27】在 XSCJ 数据库中创建表books,其中包含所有的约束定义。 CREATE TABLE books( book_id number(10),book_nam

32、e varchar2(50) not null,book_desc varchar2(50) DEFAULT New book,max_lvl number(3,2) not null,trade_price number(4,1) not null, CONSTRAINT ch_cost CHECK(max_lvl=250);,2018年10月12日,第55页,(3) 利用SQL语句在修改表时创建CHECK约束语法格式:ALTER TABLE table_nameADD( CONSTRAINT check_name CHECK(check_expression)【例3.28】通过修改XSCJ

33、数据库的books表,增加批发价字段trade_price的 CHECK约束。ALTER TABLE booksADD( CONSTRAINT ch_price CHECK(trade_price=250);(4) 利用SQL语句删除CHECK约束CHECK约束的删除可在OEM中删除,有兴趣的读者可以自己试一试,在此介 绍如何利用SQL命令删除。语法格式:ALTER TABLE table_nameDROP CONSTRAINT check_name功能:在table_name指定的表中,删除名为check_name的约束。【例3.29】删除XSCJ数据库中books表批发价字段的CHECK约

34、束。ALTER TABLE booksDROP CONSTRAINT ch_price;,2018年10月12日,第56页,2利用OEM创建和删除PRIMAY KEY或UNIQUE约束,利用OEM创建和删除PRIMAY KEY或UNIQUE 约束的操作过程同利用OEM创建和删除CHECK约 束基本相同,唯一的区别是在选择约束类型时选 择PRIMAYKEY或UNIQUE约束,详细操作请参照 利用OEM创建和删除CHECK约束。,2018年10月12日,第57页,2. 利用SQL语句创建和删除PRIMAY KEY及UNIQUE约束 (1) 创建表的同时创建PRIMAY KEY或UNIQUE约束 语

35、法格式:CREATE TABLE table_name /*指定表名*/(column_name datatype /*定义字段*/CONSTRAINT constraint_name /*定义约束名*/NOT NULLPRIMARY KEY | UNIQUE /*定义约束类型*/,n) /*n表示可定义多个字段*/ 在语法格式中,通过关键字PRIMARY KEY、UNIQUE说明所创建的约束类型。,2018年10月12日,第58页,【例3.30】对XSCJ数据库中XS表的学号字段创建PRIMARY KEY约束,对身 份证号码字段定义UNIQUE约束。CREATE TABLE XS( XH c

36、har(6) NOT NULLCONSTRAINT 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 date NOT NULL,ZXF number(2) NULL,BZ varchar2(100) NULL,);,2018年10月12日,第59页,(2) 利用修改表创建PRIMAY KEY或UNIQUE约束语法格式:ALTER TABLE table_nameADD( CONSTRAINT con

37、straint_namePRIMARYKEY(column_name,n) 说明: 这是创建PRIMAY KEY约束,ADD CONSTRAINT表示对table_name表增加一个约 束,约束名由constraint_name指定,约束类型为PRIMARY KEY。索引字段由 column_name参数指定,可包含一列或多列。 语法格式:ALTER TABLE table_nameADD(CONSTRAINT constraint_name UNIQUE(column_name,n) 这是创建UNIQUE约束。,2018年10月12日,第60页,【例3.31】 先在XSCJ数据库中创建表XS

38、,然后通过修改表,对学号字段创建 PRIMARY KEY约束,对身份证号码字段定义UNIQUE约束。CREATE TABLE XS( XH char(6) NOT NULL,XM char(8) NOT NULL,INDENTITY char(20),ZYM char(10) NULL,XB char(2) NOT NULL,CSSJ date NOT NULL,ZXF number(2) NULL,BZ varchar2(100) NULL,RXSJ date);ALTER TABLE XSADD(CONSTRAINT PK_XS PRIMARY KEY(XH);ALTER TABLE XS

39、ADD(CONSTRAINT UN_XS UNIQUE(INDENTITY);,2018年10月12日,第61页,(3) 删除PRIMARY KEY或UNIQUE约束 语法格式:ALTER TABLE table_nameDROP CONSTRAINT constraint_name,n; 【例3.32】删除创建的UN_XS的UNIQUE约束。ALTER TABLE XSDROP CONSTRAINT UN_XS;,2018年10月12日,第62页,1. 利用OEM定义表之间的参照关系例如,要建立XS表和XS_KC表之间的参照完整性,操作步骤如下:(1) 按照前面所介绍的方法定义主表的主键。在

40、此,定义XS表中的学号字段为主键。(2) 如图3.21所示,选择“FOREIGN”约束条件,单击“添加”按钮,进入“添加FOREIGN约束条件”界面,如图3.22所示。(3) 在名称栏输入约束名称FK_XH。在表列项的“可用列”列表选择“XH”字段添加到所选列列表。在引用表列项的引用表选择所关联表;单击“开始”,引入关联表所有字段到可用列列表,选择“XH”字段添加至所选列。单击“确定”,系统会自动完成创建工作。,2018年10月12日,第63页,2. 利用OEM删除表间的参照关系 利用OEM删除表间的参照关系和删除CHECK约束的方法一样,请参照删除 CHECK约束的方法。3. 利用SQL命令

41、定义表间的参照关系前面已介绍了创建主键(PRMARY KEY约束)的方法,在此将介绍通过SQL 命令创建外键的方法。(1) 创建表时同时定义外键约束 语法格式:CREATE TABLE table_name /*指定表名*/(column_name datatype FOREIGN KEYREFERENCES ref_table(ref_column),n /*n表示可定义多个字段*/,2018年10月12日,第64页,【例3.33】在XSCJ数据库中创建主表XS,XS.XH为主键,然后定义从表 XS_KC,XS_KC.XH为外键。首先创建主表:CREATE TABLE XS( XH char

42、(6) NOT NULLCONSTRAINT PK_XH PRIMARY KEY,XM char(8) NOT NULL,ZYM char(10) NULL,XB char(2) NOT NULL,CSSJ date NOT NULL,ZXF number(1) NULL,BZ varchar2(100) NULL );,2018年10月12日,第65页,然后创建从表:CRAETE TABLE XS_KC( XH char(6) NOT NULL CONSTRAINT FK_XH FOREIGN KEY,REFENCES XS(XH),KCH char(3) NOT NULL,CJ numbe

43、r(2,1),XF number(1),); (2) 通过修改表定义外键约束 语法格式:ALTER TABLE table_nameADD CONSTRAINT constraint_nameFOREIGN KEY( column,n)REFERENCES ref_table(ref_column,n),2018年10月12日,第66页,【例3.34】假设XSCJ数据库中KC表为主表,KC.KCH字段已定义为主键。 XS_KC表为从表,如下示例用于将XS_KC.KCH字段定义为外键。ALTER TABLE XS_KCADD(CONSTRAINT FK_KC FOREIGN KEY(KCH)REFERENCES KC(KCH);4. 利用SQL语句删除表间的参照关系删除表间的参照关系,实际上删除从表的外键约束即可。语法格式与前面 其它约束删除的格式相同。 【例3.35】删除上面对XS_KC.KCH字段定义的FK_kc外键约束。ALTER TABLE XS_KCDROP CONSTRAINT FK_KC;,2018年10月12日,第67页,作业,P282 实验2 表数据插入、修改和删除 P284 实验3 索引和完整性,

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

当前位置:首页 > 教学课件 > 大学教育

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1