数据库表的约束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. Verifying Package Integrity Using MD5 Checksums or GnuPG

    In this note, I reference the MySQL manual file. After downloading the MySQL package that suits your ...

  2. Linux ls命令详解-乾颐堂CCIE

      ls命令用法举例: 例一:列出/home文件夹下的所有文件和目录的详细资料: 1 ls -l -R /home 命令参数之前要有一短横线“-”, 上面的命令也可以这样写: 1 ls -lR /ho ...

  3. (转) c/c++调用libcurl库发送http请求的两种基本用法

    libcurl主要提供了两种发送http请求的方式,分别是Easy interface方式和multi interface方式,前者是采用阻塞的方式发送单条数据,后者采用组合的方式可以一次性发送多条数 ...

  4. javascript总结40:DOM中操作样式的两种方式

    1 DOM中操作样式的两种方式 1 通过元素的style属性 注意: 通过style属性设置样式时,css中要写单位的属性,在js代码中也要加单位 //html <div id="bo ...

  5. javascript总结19:javascript 使用概述

    1 JS作用 1.验证表单(以前的网速慢)`` 2.页面特效(PC端的网页效果) 3.移动端(移动web和app) 4.异步和服务器交互(AJAX) 5.服务端开发(nodejs) 2 浏览器的主要构 ...

  6. css3系列之animation

    在上次博文中已经讲了transition,其实animation与transition功能相同,都是通过改变元素 的属性来实现动画效果的.但是它们也有区别:transition是只能通过改变指定属性的 ...

  7. java 基础语言: 方法

    方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1, 参数类型 参数名2, ...) { 方法体; return 返回值; } 方法使用的注意事项: 1,方法不调用,自己不执行 2,方法中不 ...

  8. LinearLayout属性用法和源码分析

    转载自:http://www.jianshu.com/p/650c3fd7e6ab   一. LinearLayout的属性和用法 LinearLayout对于开发来说,是使用最常用的布局控件之一,但 ...

  9. 关于super关键字与继承

    super它只是一个限定词,当用super引用时,它也是引用当前对象本身,只是super只是限定了访问当前对象从父类那里继承得到成员变量或方法. import java.util.Date; publ ...

  10. 一些linux工具在windows版本下的文件放置位置

    首先说明一下windows下的常用变量(这里是XP的,win7及以上的C:\Documents and Settings实际为C:\Users) %SystemDrive%        操作系统所在 ...