zoukankan      html  css  js  c++  java
  • 数据库表的约束constraints

    数据库表的约束constraints

    • 数据完整性约束
      • 表的数据有一定的取值范围和联系,多表之间的数据有时也有一定的参照关系。
      • 在创建表和修改表时,可通过定义约束条件来保证数据的完整性和一致性。
      • 约束条件是一些规则,在对数据进行插入、删除和修改时要对这些规则进行验证,从而起到约束作用。
    • 完整性约束分类
      • 域完整性约束(非空not null,检查check)
      •  实体完整性约束(唯一unique,主键primary key)
      • 参照完整性约束(外键foreign key)

    约束类型

    说明

    主键约束(Primary Key)

    要求主键列数据唯一,并且不允许为空。主键可以包含表的一列或多列,如果包含表的多列,则需要在表级定义。

    唯一约束(Unique)

    要求该列唯一,允许为空,但只能出现一个空值

    检查约束(Check)

    某列取值范围限制、格式限制等,如年龄的约束

    非空约束(not null)

    某类内容不能为空

    外键约束(Foreign Key)

    用于两表间建立关系,需要指定引用主表的那列。外键通常用来约束两个表之间的数据关系,定义外键的那张表称为子表,另一张表称为主表。

    在表的创建过程中,应该先创建主表,后创建子表。

    • 创建约束的时机
      • 在建表的同时创建
      • 建表后创建
    • 约束从作用上分类,可以分成两大类:
      • 表级约束:可以约束表中的任意一列或多列。可以定义出了Not Null以外的任何约束。
      • 列级约束:只能约束其所在的某一列。可以定义任何约束。
    • 命名规则推荐采用:约束类型_约束字段
      • 非空约束     NN__表名列名
      • 唯一约束     UK_表名_列名
      • 主键约束     PK_表名
      • 外键约束     FK_表名_列名
      • 检查约束     CK_表名_列名
    • 主键约束
      • 主键约束是数据库中最重要的一种约束。在关系中,主键值不可为空,也不允许出现重复,即关系要满足实体完整性规则。
      • 主键从功能上看相当于非空且唯一
      • 一个表中只允许一个主键
      • 主键是表中能够唯一确定一个行数据的字段
      • 主键字段可以是单字段或者是多字段的组合
      • Oracle为主键创建对应的唯一性索引

         create table t3(

             id number(4),  --primary key,

              constraint t3_pk primary key(id)  ---可自己给约束起名 t3_pk

               )

    • 唯一性约束
      • 唯一性约束条件确保所在的字段或者字段组合不出现重复值
      • 唯一性约束条件的字段允许出现空值,且可以多个空值
      • Oracle将为唯一性约束条件创建对应的唯一性索引

           CREATE TABLE employees(

                 id      NUMBER(6),

                   name        VARCHAR2(25) NOT NULL UNIQUE,

                     email            VARCHAR2(25),

                    alary           NUMBER(8,2),

                     hire_date        DATE NOT NULL,

                    CONSTRAINT emp_email_uk UNIQUE(email)

           );

    • 非空约束
      • 确保字段值不允许为空
      • 只能在字段级定义

             CREATE TABLE employees(

                       employee_id    NUMBER(6),

                       name      VARCHAR2(25) NOT NULL,

                       salary         NUMBER(8,2),

                       hire_date      DATE CONSTRAINT emp_hire_date_nn NOT NULL

             )

    • Check约束
      • Check约束用于对一个属性的值加以限制
      • 在check中定义检查的条件表达式,数据需要符合设置的条件

      create table emp3

      (        id number(4) primary key,

               age number(2)  check(age > 0 and age < 100),

               salary number(7,2),

               sex char(1),

               constraint salary_check check(salary > 0)

      )

    • 在这种约束下,插入记录或修改记录时,系统要测试新的记录的值是否满足条件
    • 外键约束
      • 外键是表中的一个列,其值必须在另一表的主键或者唯一键中列出
      • 作为主键的表称为“主表”,作为外键的关系称为“依赖表”
      • 外键参照的是主表的主键或者唯一键
      • 对于主表的删除和修改主键值的操作,会对依赖关系产生影响,以删除为例:当要删除主表的某个记录(即删除一个主键值,那么对依赖的影响可采取下列3种做法:FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO)
        • RESTRICT方式:只有当依赖表中没有一个外键值与要删除的主表中主键值相对应时,才可执行删除操作。
        • CASCADE方式:将依赖表中所有外键值与主表中要删除的主键值相对应的记录一起删除
        • SET NULL方式:将依赖表中所有与主表中被删除的主键值相对应的外键值设为空值
      • [ON DELETE [CASCADE|SET NULL]] 如省略on短语,缺省为第一中处理方式。
    • 添加约束
      • ALTER TABLE 表名 
      •      ADD CONSTRAINT 约束名  约束类型  具体的约束说明
    • 删除约束
      • ALTER TABLE 表名 
      •       DROP CONSTRAINT 约束名
    • 可增加或删除约束,但不能直接修改
  • 相关阅读:
    Qt Creator 5.0 发布
    Qt编写可视化大屏电子看板系统19-横向柱状图
    Qt开发经验小技巧166-170
    Qt编写安防视频监控系统62-子模块6预置位
    Qt编写可视化大屏电子看板系统18-柱状分组图
    Qt编写安防视频监控系统61-子模块5设备控制
    如果对golang的gin框架中的handler做单元测试
    samba
    内存溢出
    动态规划面试题
  • 原文地址:https://www.cnblogs.com/vieta/p/10740088.html
Copyright © 2011-2022 走看看