数据库表的约束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 约束名
  • 可增加或删除约束,但不能直接修改

数据库表的约束constraints的更多相关文章

  1. Oracle_数据库表的约束

    Oracle_数据库表的约束 完整性约束分类 域完整性约束 (非空not null,检查check) 实体完整性约束 (唯一unique,主键primary key) 参照完整性约束 (外键forei ...

  2. DDL创建数据库,表以及约束(极客时间学习笔记)

    DDL DDL是DBMS的核心组件,是SQL的重要组成部分. DDL的正确性和稳定性是整个SQL发型的重要基础. DDL的基础语法及设计工具 DDL的英文是Data Definition Langua ...

  3. MySQL 表的约束与数据库设计

    DQL 查询语句 排序 # 单列排序 * 只按某一个字段进行排序,单列排序 # 组合排序 * 同时对多个字段进行排序,如果第1个字段相等,则按照第2个字段排序,依次类推 * 语法: # 具体操作 * ...

  4. Oracle 数据库表中已有重复数据添加唯一键(唯一约束)

    Oracle 数据库表中已有重复数据添加唯一键(唯一约束) 问题描述 以 demo 举例,模拟真实场景. 表 TEST_TABLE 有如下字段和数据:id 是主键,code 没有设置键和索引 ID C ...

  5. Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束

    Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束 一丶MySQL的存储引擎 什么是存储引擎:    MySQL中的数据用各种不同的技术存储在文件( ...

  6. 数据库之 MySQL --- 数据处理 之 表的约束与分页(七)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有)     1.约束 :为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制 ​ ...

  7. SQLite 入门教程(三)好多约束 Constraints(转)

    转于: SQLite 入门教程(三)好多约束 Constraints 一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应 ...

  8. SQLite 入门教程(三)好多约束 Constraints

    一.约束 Constraints 在上一篇随笔的结尾,我提到了约束, 但是在那里我把它翻译成了限定符,不太准确,这里先更正一下,应该翻译成约束更贴切一点. 那么什么是约束呢? 我们在数据库中存储数据的 ...

  9. 使用 hibernate 根据映射文件生成数据库表

    为了更好的显示效果,可以在hibernate.cfg.xml配置文件的<session-factory>标签里加入以下内容: 显示sql语句和格式化显示sql语句: <propert ...

随机推荐

  1. 如何在IIS中承载WCF NetTcpBinding 服务

    这篇博客将介绍如何在IIS中承载NetTcpBinding的服务. 1. 首先准备服务代码. Contract namespace Contract { [ServiceContract] publi ...

  2. 实践作业4:Web测试实践(小组作业)每日任务记录1

    会议时间:2017年12月21日会议地点:东九教学楼自习区主 持 人:王晨懿参会人员:王晨懿.余晨晨.郑锦波.杨潇.侯欢.汪元记 录 人:王晨懿会议议题:小组作业熟悉和任务分配 (一)选择待测产品 我 ...

  3. Spring Boot利用poi导出Excel

    至于poi的用法就不多说了,网上多得很,但是发现spring boot结合poi的就不多了,而且大多也有各种各样的问题. public class ExcelData implements Seria ...

  4. HDU 4514 湫湫系列故事――设计风景线 (树形DP)

    题意:略. 析:首先先判环,如果有环直接输出,用并查集就好,如果没有环,那么就是一棵树,然后最长的就是树的直径,这个题注意少开内存,容易超内存, 还有用C++交用的少一些,我用G++交的卡在32764 ...

  5. NIOS II下基于中断的UART接收和发送设计示例代码

    #include "sys/alt_stdio.h" #include "altera_avalon_uart_regs.h" #include "s ...

  6. spark安装配置(scala不是必须的,基于java虚拟机,因此scala可以不配,但是开发需要可以配)

    下载 http://spark.apache.org/downloads.html 下载2.3.1 https://blog.csdn.net/qq_15349687/article/details/ ...

  7. C++-结构体,联合体,枚举,的区别

    结构体: struct  NUM { int number; }a; 结构体是声明只是一个模型,没有分配内存空间.当进行定义结构体变量后才分配内存空间 联合体: union  data { int a ...

  8. SharpMap开发教程——图层标注

    在GIS开发中,根据图层属性字段对要素进行标注(图层标注)是一项常规的.必备的功能.在基于SharpMap开发GIS应用时,也可以方便的实现该功能. 1.加载Shapefile图层数据 SharpMa ...

  9. [LeetCode 题解]: Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of strings. 题解: 寻找一组字符串的最 ...

  10. Spring Boot - 记录日志

    比自己写文本日志的好处 默认定义好了一些日志级别,会记录当前使用的级别以上的日志,通常线上环境设置的级别较高记得较少 有一些自动split之类的功能 Commons-logging 日志级别:TRAC ...