Oracle(13)Maintaining Data Integrity

目录

一、基础知识

1、Data Integrity 数据库的完整性

2、Types of Constraints 约束类型

3、Constraint States 约束状态

4、Guidelines for Constraints 约束准则

二、基础操作

1、Enabling Constraints 启用约束

2、命令方式创建约束

 3、修改表创建的约束

4、删除约束

5、列级定义

6、表级定义


Maintaining Data Integrity 维护数据完整性

目标:

  • 实现数据完整性约束
  • 维护完整性约束
  • 获取约束信息

一、基础知识

1、Data Integrity 数据库的完整性

2、Types of Constraints 约束类型

  • NOT NULL:非空约束(表级和列级)
  • UNIQUE:唯一约束(一列或者多列的组合是唯一的)
  • PRIMARY KEY:主键约束(同时包含非空约束和唯一约束)
  • FOREIGN KEY:外键约束
  • CHECK:限制约束(比如约束id必须大于0,性别只能为男女之类的)

3、Constraint States 约束状态

以下是最佳切换步骤(unique约束会让这四种状态切换存在问题,切换前要先变成nounique状态):

  • DISABLE NOVALIDATE:稍后执行约束,不检查之前存在的数据
  • DISABLE VALIDATE:稍后执行约束,检查之前存在的数据,此时就等于只读模式
  • ENABLE NOVALIDATE:立刻执行约束,不检查之前存在的数据
  • ENABLE VALIDATE:立刻执行约束,并且检查之前存在的数据

完整性约束的有效使用:一个程序
按照以下顺序使用完整性约束状态可以确保获得最佳收益:

  • 1.禁用状态。
  • 2.执行操作(加载、导出、导入)。
  • 3.启用novalidate状态。
  • 4.启用状态。

按此顺序使用约束的一些好处是:

  • 没有锁。
  • 所有约束都可以同时进入启用状态。
  • 约束启用是并行完成的。
  • 允许在表上进行并发活动

4、Guidelines for Constraints 约束准则

  • 主键约束和唯一约束
    • 将索引放在单独的表空间中
    • 如果批量加载频繁,请使用非唯一索引。
  • 自引用外键
    • 在初始加载后定义或启用外键。
    • 延迟约束检查。

二、基础操作

1、Enabling Constraints 启用约束

  • 表上没有锁
  • 主键和唯一键需要使用非唯一索引
ALTER TABLE hr.departments
ENABLE NOVALIDATE CONSTRAINT dept_pk;

2、命令方式创建约束

这里以check约束为例

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

例如:创建一个表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
);

 3、修改表创建的约束

ALTER TABLE <表名>
    ADD CONSTRAINT <约束名> <约束种类>

4、删除约束

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

5、列级定义

  • 列级定义是在定义列的同时定义约束。
  • 特别注意:not null只能在列级定义,不可在表级定义中出现。

示例:

create table temp1
( id number primary key,
name varchar2(32) not null
);

6、表级定义

  • 表级定义是在定义了所有列后,再定义约束。
  • 基本语法:
  • create table 表名(字段名 字段类型,...,constraint 约束名称 约束条件(字段),约束条件(字段2),..);

示例:

create table temp2
( id number,
name varchar(32),
constraint pr_id primary key(id), unique(name)
);

语法:

constraint 约束名称 primary key(字段..)

constraint 约束名称 foreign key(字段) references 主表(字段)

constraint 约束名称 unique(字段)

constraint 约束名称 check(字段条件)

一般情况下,使用列级定义即可。但是如果遇到定义复合主键(两列一起被定义为主键)时,需要用到表级定义。

举例,将id与name定义为复合主键:

create table temp3
(id number,
name varchar2(64),
nums number,
constraint pk_id_name primary key(id,name)
);
  • 19
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会编程的喵星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值