• 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 启用约束

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

    2、命令方式创建约束

    这里以check约束为例

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

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

    1. create table demo(
    2. sid VARCHAR(20) NOT NULL ,
    3. sname VARCHAR(20) NOT NULL,
    4. profession VARCHAR(20) NOT NULL,
    5. score NUMBER(4) check(score>60 and score<80) NOT NULL
    6. );

     3、修改表创建的约束

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

    4、删除约束

    1. ALTER TABLE <表名>
    2. DROP CONSTRAINT <约束名称>

    5、列级定义

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

    示例:

    1. create table temp1
    2. ( id number primary key,
    3. name varchar2(32) not null
    4. );

    6、表级定义

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

    示例:

    1. create table temp2
    2. ( id number,
    3. name varchar(32),
    4. constraint pr_id primary key(id), unique(name)
    5. );

    语法:

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

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

    constraint 约束名称 unique(字段)

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

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

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

    1. create table temp3
    2. (id number,
    3. name varchar2(64),
    4. nums number,
    5. constraint pk_id_name primary key(id,name)
    6. );
  • 相关阅读:
    评:MD制裁芯片,信息产业要回“石器时代”
    鸿蒙介绍、鸿蒙编程环境、基本组件、页面跳转学习
    Node.js精进(8)——错误处理
    leetcode 606.根据二叉树创建字符串
    【Paper】2022_切换拓扑下动态事件触发多智能体系统固定时间一致性
    第四章 SpringBoot运行流程源码分析
    elasticsearch api 调用
    挂载新的空间磁盘(解锁)
    Redis命令和Redisson对象匹配列表
    联邦学习:联邦多视角学习在跨领域推荐中的应用
  • 原文地址:https://blog.csdn.net/yushaoyyds/article/details/134190259