Oracle数据库中的数据完整性

目录

1.数据完整性约束作用

2.数据完整性约束的分类

3.完整性约束的状态

4.域完整性的实现

(1)check约束

①可视化方式创建check约束

②命令方式创建约束

③修改表创建的约束

④删除约束

(2)实体完整性约束实现

①primary key和unique的区别

②primary key和unique的相同点

③可视化方式创建主键和唯一性约束

④命令方式创建主键与唯一性约束

⑤修改创建的约束

⑥删除约束

 (3)参照完整性约束

①创建foreign key时考虑的因素

②可视化方式创建参照关系

③命令方式创建参照 

④修改外键约束

⑤删除表之间的参照关系


Oracle数据库中索引的基本使用

Oracle学习的相关知识点(汇总)

1.数据完整性约束作用

  • 在数据应用的代码中增强了商业规则;
  • 使用存储过程,可完整控制对数据的访问;
  • 增强了触发存储数据库过程的商业规则;

2.数据完整性约束的分类

  • 域完整性约束(或者列完成性)
    • 指的是一个数据集对某一列是否有效和确定是否允许空值;如使用check限制某一列的值只能在某一个范围内
  • 实体完整性(行完整性)
    • 要求表中每一行都有一个唯一的标识符;如主键约束
  • 参照完整性(引用完整性)
    • 保证主表与从表(被参照表)之间中数据的一致性;如建立主键和外键
      • 参照完整性的要求
        • 从表中不能引用不存在的键值
        • 如果主表中的键值更改了,那么在整个数据库中,对从表中该键值的所有引用都要进行一致性更改
        • 如果主表中没有关联的记录,则不能将记录添加到从表中
        • 如果要删除主表中的某一条记录,应该先删除从表中与该记录匹配的相关记录。
  • 完整性约束是通过限制列数据,行数据和表之间数据来保证数据完整性的有效方法,约束是保证完整性的标准方法,每一种数据完整性都由不同的约束类型来保证,约束能确保有效的数据输入到列中并维护表与表之间的关系。

3.完整性约束的状态

  • 禁止的非校验状态:该约束不起作用,但是依然存在数据字典中;
  • 禁止的校验状态:对约束列的任何修改都是禁止的。
  • 允许的非校验状态或者强制状态:可以向表中添加数据,但是与约束有冲突的数据不能添加;
  • 允许的校验状态:约束处于正常的状态。

4.域完整性的实现

(1)check约束

①可视化方式创建check约束

②命令方式创建约束

CREATE TABLE <表名>
( <列名> <数据类型> [DEFAULT <默认值>] [NOT NULL | NULL]
    [CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>) /*定义为列的约束*/
    [,…n]
    [CONSTRAINT <CHECK约束名>] CHECK(<CHECK约束表达式>) /*定义为表的约束*/
)
  •  说明:
    • CONSTRAINT关键字用于为CHECK约束定义一个名称,如果省略则系统自动为其定义一个名称。
    • CHECK表示定义CHECK约束,其后表达式为逻辑表达式,称为CHECK约束表达式。如果直接在某列的定义后 面定义CHECK约束,则CHECK约束表达式中只能引用该列,不能引用其他列。如果需要引用不同的列,则必 须在所有的列定义完之后再定义CHECK约束。

例如:创建一个表demo,并且为该表的属性score创建一个check约束条件。

create table demo(
    sid VARCHAR(20) NOT NULL ,
    sname VARCHAR(20) NOT NULL,
    profession VARCHAR(20) NOT NULL,
    score NUMBER(4) check(score>60 and score<80) NOT NULL
);

③修改表创建的约束

ALTER TABLE <表名>
    ADD( CONSTRAINT <CHECK约束名> CHECK(<CHECK约束表达式>))

④删除约束

ALTER TABLE <表名>
    DROP CONSTRAINT <CHECK约束

(2)实体完整性约束实现

  • 一个表只能有一个primary key(主键)约束,而且primary key约束中的列不能取空值。
  • primary key约束是由多列组合定义的,则某一列的值可以重复,但是primary key约束定义中所有列的组合值必须唯一。
  • 如果要确保一个表中的非主键列不输入重复值,则在该列上定义一个唯一约束(UNIQUE)。

①primary key和unique的区别

  • 一个表只能创建一个primary key约束,但是可以根据需要对不同的列创建若干个unique约束。
  • primary key字段的值不能为NULL,而unique字段的值可以为NULL。

②primary key和unique的相同点

  • 它们都不允许表中对应字段存在重复值。
  • 在创建primary key和unique约束时都会自动产生索引。

③可视化方式创建主键和唯一性约束

④命令方式创建主键与唯一性约束

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

 例:1:为表deptments创建主键约束。

 例子2:位表student创建unique约束。

create table student(
    sid VARCHAR(20) NOT NULL constraint demo02 primary key,
    status VARCHAR(20) NOT NULL constraint stdemo02 UNIQUE,
    sname VARCHAR(20) NOT NULL,
    profession VARCHAR(20) NOT NULL,
    score NUMBER(4) 
);

⑤修改创建的约束

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

例子:为表deptments表的deptname创建一个唯一性约束。 

 

⑥删除约束

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

 (3)参照完整性约束

对于两个相关联的表(主表与从表)进行数据插入和删除时,通过参照完整性保证它们之间的数据一致性。主要使用foreign key定义从表外键,primary key定义主表主键,实现主表和从表之间的关联。

①创建foreign key时考虑的因素

  • 删除主表之前,必须删除从表(foreign key)约束;
  • 如果不删除或者禁止foreign key约束,则不能删除主表;
  • 删除包含主表的表空间之前,必须删除foreign key约束。

②可视化方式创建参照关系

③命令方式创建参照 

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

例子1:为表Employee中的deptmentid建立外键 (参照表deptments为表employee建立外键)

例子2:当删除表CJB中的记录时,同时删除XSB表中的记录。

create table XSB(
    sid VARCHAR(20) NOT NULL constraint demo02 primary key,
    status VARCHAR(20) NOT NULL constraint stdemo02 UNIQUE,
    sname VARCHAR(20) NOT NULL,
    profession VARCHAR(20) NOT NULL,
    score NUMBER(4),
    constraint fk_xsb FOREIGN key(sid) reference cjb(sid) 
        on delete cascade
);

④修改外键约束

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

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

ALTER TABLE CJB
    ADD CONSTRAINT FK_KC FOREIGN KEY(课程号)
        REFERENCES KCB(课程号)

⑤删除表之间的参照关系

删除表间的参照关系,实际上删除从表的外键约束即可。

ALTER TABLE <从表名>
    DROP CONSTRAINT <约束名>

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

ALTER TABLE CJB
    DROP CONSTRAINT FK

猜你喜欢

转载自blog.csdn.net/Keep_Trying_Go/article/details/127540148
今日推荐