【ORACLE】数据完整性

一、数据完整性的分类

1.域完整性
域完整性又称为列完整性,指定一个数据集对某一个列是否有效和确定是否允许空值。

2.实体完整性
实体完整性也可以称为行完整性,要求表中的每一行有一个唯一的标识符,这个标识符就是主关键字。

3.参照完整性
参照完整性又称引用完整性,他保证主表和从表(被参照表)中数据的一致性。在Oracle中,参照完整性的实现是通过定义外键与主键之间的对应关系实现的。如果在被引用表中的一行被某外键字引用,那么这一行既不能被删除,也不能修改主关键字。

二、域完整性的实现

使用check约束

CHECK约束实际上是字段输入内容的验证规则,表示这个字段的输入内容必须满足CHECK约束的条件;若不满足,则数据无法正常输入。

1、在创建表时创建约束

语法格式:

CREATE TABLE <表名>
(    <列名> <数据类型> [DEFAULT <默认值>] [NOT NULL | NULL]
        [CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>)     /*定义为列的约束*/
    [,…n]
    [CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>)            /*定义为表的约束*/
)

CONSTRAINT:为约束字CHECK约束定义一个名称,如果省略则系统自动定义一个名称。

CHECK:定义在某列后,则此约束只适用于该列。

                定义在所有列之后,则此约束适用于该表。

【例1】定义KCB2表,同时定义其“学分”列的约束条件。

【例2】 在XSCJ数据库中创建books表,其中包含所有的约束定义。

DEFAULT'New book' :默认值,当插入为空时默认为New book

2、在修改表时创建约束

语法格式:

ALTER TABLE<表名>

        ADD(CONSTRAINNT <CHENK约束名> CHECK (<CHECK 约束表达式>))

//在已经定义的表中增加一个约束定义。

【例】通过修改数据库的books表,增加trade_price(批发价)字段的CHECK约束。

3、删除约束

语法格式:

ALTER TABLE <表名>

        DROP CONSTRAINT<CHECK 约束名>

【例】删除books表批发价字段的CHECK约束。
 

三、实体完整性的实现

可以通过索引、UNIQUE约束、PRIMARY KEY约束实现数据的实体完整性。

PRIMARY KEY约束与UNIQUE约束的区别:

1、一个表只能创建一个PRIMARY KEY约束,但可以根据需要对不同得列创建若干个UNIQUE约束。

2.PRIMARY KEY字段的值不允许取NULL,而UNIQUE字段的值可取NULL。

PRIMARY KEY约束与UNIQUE约束的共同点:

两者均不允许表中对应字段存在重复值;在创建PRIMARY KEY约束与UNIQUE约束时会自动产生索引。

1、创建表的同时创建约束

语法格式:

CREATE TABLE <表名>                                                 /*指定表名*/
        (<列名> <数据类型> [NULL |NOT NULL]                /*定义字段*/
                {[CONSTRAINT <约束名>]                             /*定义约束名*/
                  PRIMARY KEY | UNIQUE}                           /*定义约束类型*/
                [,…n]
    [, [CONSTRAINT <约束名>] {PRIMARY KEY | UNIQUE}(<列名>,[,…n]) ]  
]
)

【例】对XSCJ数据库中XSB2表的“学号”字段创建PRIMARY KEY约束,对“身份证号码”字段定义UNIQUE约束。

2、通过修改表来建立约束

语法格式:

ALTER TABLE <表名>
    ADD([CONSTRAINT <约束名>] {PRIMARY KEY | UNIQUE} (<列名>[,…n])

索引字段可包含一列或多列。

【例】先在XSCJ数据库中创建表XSB3,然后通过修改表,对学号字段创建PRIMARY KEY约束,对身份证号字段创建UNIQUE约束。

 

3、 删除约束

语法格式:

ALTER TABLE <表名>
     DROP CONSTRAINT <约束名>[,…n];

【例】删除XSB3的UN_XS约束。

四、参照完整性的实现

两个相关联的表进行数据插入和删除时,通过参照完整性保证他们之间数据的一致性。利用FOREIGN KEY定义从表的外键,PRIMARY KEY约束定义主表中的主键(不允许为空),可实现主表和从表之间的参照完整性。

对于FOREIGN KEY约束来说,在创建时应该考虑以下因素。
(1)在删除主表之前,必须删除FOREIGN KEY约束。
(2)如果不删除或禁止FOREIGN KEY约束,则不能删除主表。
(3)在删除包含主表的表空间之前,必须先删除FOREIGN KEY约束。

关键字REFERENCES 指明该字段为外键。

ON DELETE CASCADE 表示从主表删除数据时自动删除从表中匹配的行。

ON DELETE SET NULL表示当从主键删除数据时,设置从表中与之对应的外键列为NULL。

1、创建表的同时定义外键约束

语法格式:
CREATE TABLE <从表名>
(      <列定义> [ CONSTRAINT <约束名> ] REFERENCES <主表名>[ ( <列名> [ ,...n ] ) ]
       [,…n]
     [ [ CONSTRAINT <约束名> ] [ FOREIGN KEY ( <列名> [,...n ] ) [<参照表达式>]]
);
其中:
<参照表达式>::=
     REFERENCES <主表名>[ ( <列名> [ ,...n ] ) ]
     [ ON DELETE { CASCADE | SET NULL } ]

【例1】创建stu表,要求表中所有的学生学号都必须出现在XSB表中。

【例2】创建point表,要求表中所有的学号、课程号组合都必须出现在CJB表中,并且当删除CJB表中的记录时同时删除point表中与主键对应的记录。

2、通过修改表定义外键约束

语法格式:
ALTER TABLE <表名>
    ADD CONSTRAINT <约束名>
        FOREIGN KEY( <列名>[,…n])
        REFERENCES <主表名>(<列名>[,…n]) <参照表达式>

【例】假设数据库中KCB表为主表,KCB的“课程号”字段已定义为主键。CJB表为从表,如下示例用于将CJB的“课程号”字段定义为外键。

3、删除表间的参照关系

【例】 删除以上对“CJB.课程号”字段定义的FK_KC外键约束。

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值