zoukankan      html  css  js  c++  java
  • Oracle基础(八) 数据完整性

    一、数据完整性

      数据完整性要求数据库中的数据具有准确性。准确性是通过数据库表的设计和约束来实现的。为了实现数据完整性,数据库需要做两方面的工作:

    • 确保每行的数据符合要求。
    • 确保每列的数据符合要求。

      为了实现以上要求,Oracle提供了一下4种类型的约束(Constraint)。

      

      1、实体完整性约束

      实体完整性要求表中的每一行数据都反映不同的实体,不能存在相同的数据行。通过主键约束,唯一约束来实现实体完整性。

      (1)主键约束:

      表中的一列或者纪略组合的值能用来唯一的表示表中的每一行,这样的一列或者多列的组合叫做表的主键。

      主键自带唯一性,并且不能为空,一个表只能有一个主键,主键确保了表中数据行的唯一,同一张表中,可以使用多个列共同作为主键。在选择主键时,应遵循两个原则,最少性和稳定性

      (2)唯一约束:

      保证数据行中的某一列的数据是唯一的,不重复的。这样可以添加唯一约束。

      唯一约束和主键的区别:

    • 主键不能为空,唯一可以为空,但只允许有一个空值。
    • 主键一张表中只有一个,而唯一可以有多个。
    • 主键可以由多个表来组成,唯一只能是单列。
    • 主键可以作为其他表的外键,唯一不可以。

      

      2、域完整性:

      与完整性是指给定咧的输入的有效性。通过数据类型、检查约束、输入格式、外键约束、默认值、非空约束等方法来实现。

      

      3、引用完整性:

      引用完整性是指为两个表中存在一定的联系,从而保证数据的完整性。例如:班级和学生,学生所在班级一定是在班级表中所存在的,不然就会出现不准确。引用完整性我们可以通过外键约束来实现。

      4、自定义完整性:

      用户自己定义约束规则。主要通过存储过程和触发器对象来实现。

    二、添加约束

      在创建表时,我们可以再字段后添加各种约束。这里分为列级定义和表级定义:

      1、列级定义

      列级定义是指在定义列的同时定义定义约束。

      如在t_class表定义主键和唯一约束  

    --创建班级表
    CREATE TABLE t_class
    (
      cid NUMBER CONSTRAINT pk_cid PRIMARY KEY,         --为cid添加主键约束
      cname VARCHAR2(20) constraint uq_sortname UNIQUE  --为cname添加唯一约束
    )

      说明:在列级定义时,加不加constraint pk_department都是可以的,区别是不加的话,系统会自动分配一个主键约束名称,可读性差。

      2、表级定义

      表级定义是指在定义了所有列后,再定义约束。需要注意:not null只能在列级上定义。

      以在建立学生和班级表时定义主键约束和外键约束为例:  

    --创建学生表
    create table t_student(
        stuID number(4),
        stuname varchar2(20) NOT NULL,
        stupass varchar2(20) NOT NULL,
        cid NUMBER NOT NULL,
           constraint uq_username UNIQUE(stuname),  --创建唯一约束
           constraint ck_userpass Check(LENGTH(stupass) > 3),  --创建检查约束(密码长度大于3位)
        constraint pk_uid primary key(stuID), --主键约束
        constraint fk_cid foreign key(cid) references t_class(cid) --外键约束
      );

       

      3、创建表后,我们也可以在已经建好的表上添加约束,需要使用ALTER TABLE语句。

      语法:ALTER TABLE ADD CONSTRAINT 约束名 约束类型 具体的约束说明。  

    ALTER TABLE t_student
        ADD CONSTRAINT uq_username UNIQUE(stuname)  --创建唯一约束
        ADD CONSTRAINT ck_userpass Check(LENGTH(stupass) > 3)   --创建检查约束(密码长度大于3位)
      ADD CONSTRAINT pk_uid primary key(stuID) --主键约束
      ADD CONSTRAINT fk_cid foreign key(cid) references t_class(cid) --外键约束

       默认值约束: 

      alter table 表名 modify 列名 default 默认值;

    --语法:
    ALTER TABLE tb_student
      MODIFY stubirthday DEFAULT SYSDATE   --将生日默认值设为当前系统时间

    三、删除约束

      语法:ALTER TABLE DROPCONSTRAINT 约束名   

    ALTER TABLE t_student
        DROP CONSTRAINT PK_UID

    四、查看约束

      查看T_STUDENT表中所有的约束。注意:这里的表明必须全大写否则查不到结果。

    SELECT * FROM USER_CONSTRAINTS 
    WHERE table_name = 'T_STUDENT'
  • 相关阅读:
    综合日语第一册第十课
    综合日语第一册第九课
    荒木毬菜 小情歌日文版
    c# 匿名函数
    字典取KEY,占位符,延迟刷新
    flash GC
    自定义滤镜 ColorMatrixFilter
    sql join
    NSLog Release
    Windows 运行中的命令
  • 原文地址:https://www.cnblogs.com/zhengcheng/p/4177669.html
Copyright © 2011-2022 走看看