约束和DML语句

数据完整性

  • 数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出在造成无效操作或错误信息而提出的
  • 数据完整性指存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性
  • 数据库采用多种方法来保证数据完整性,包括约束、规则和触发器

数据完整性包括:域完整性、实体完整性、引用完整性、自定义完整性

什么是约束

  • 约束是在表上强制执行的数据校验规则
  • 约束主要用于保证数据库的完整性
  • 当表中数据有相互依赖性时,可以保护相关的数据不被删除
  • 大部分数据库支持如下完整性约束
    • NOT NULL 非空
    • UNIQUE KEY 唯一键
    • PRIMARY KEY 主键
    • FOREIGN KEY 主键
    • CHECK 检查
    • DEFAULT 默认值

约束概述

  • 约束作为数据库对象,存放在系统表中,也有自己的名字
  • 创建约束的时机
    • 在建表的同时创建
    • 建表后创建(修改表)
  • 安装创建方式可分为列级和表级约束

列级约束和表级约束

  • 列级约束直接跟在列后定义,不在需要指定列名,与列名定义之间用空格分开
  • 表级约束通常放在所有的列定义之后定义,要显示指定对哪些列建立列级约束。与列定义之间采用英文逗号隔开
  • 如果时对多列建联合约束,只能使用表级约束语法

非空约束(NOT NULL)

  • 列级约束,只能使用列级约束语法定义
  • 确保字段值不允许为空
  • 只能在字段级定义
CREATE TABLE tb_student(
       ID NUMBER PRIMARY KEY,
       NAME VARCHAR2(18) NOT NULL
);

唯一约束

  • 唯一性约束条件确保所在的字段或者字段组合不出现重复值
  • 同一张表内可建多个唯一约束
  • 唯一性约束条件的字段允许出现多个NULL
  • 唯一约束可由多列组合而成
  • 建唯一约束时Oracle会为之建立对应的索引
CREATE TABLE tb_student(
       ID NUMBER PRIMARY KEY,
       NAME VARCHAR2(18) UNIQUE NOT NULL
);

主键约束

  • 主键时表中唯一确定一行数据的字段
  • 一个表中只允许一个主键
  • 主键从功能上看相当于非空确唯一
  • 主键约束不允许为NULL
  • 主键字段可以是单字段或者时多字段的组合
  • 当建立主键约束时,Oracle为主键创建对应的索引
CREATE TABLE tb_student(
  id NUMBER PRIMARY KEY,
  NAME VARCHAR2(18)
);

定义复合主键

  • 当定义约束的时候,不仅可以基于单列定义约束,也可以基于多列定义符合约束
  • 注意,复合约束只能在表级中
CREATE TABLE tb_emp(
       lastname VARCHAR2(25),
       firstname VARCHAR2(25),
       CODE VARCHAR(25),
       PRIMARY KEY(lastname, firstname)
);

一般情况下,一个表都应该有一个主键,建立主键的原则"最少性,稳定性"

外键约束

  • 外键是构建于一个表的两个字段或者两个字段之间的关系
  • 外键确保了相关的两个字段的两个关系
CREATE TABLE tb_class(
       clsId NUMBER,
       clsName VARCHAR2(20) NOT NULL,
       CONSTRAINT pk_clsId PRIMARY KEY(clsId),
       CONSTRAINT uq_clsName UNIQUE(clsName)
);

CREATE TABLE tb_student(
       stuId NUMBER, 
       stuName VARCHAR2(20),
       clsId NUMBER,
       CONSTRAINT pk_stuId PRIMARY KEY(stuId),
       CONSTRAINT uq_stuName UNIQUE(stuName),
       CONSTRAINT fk_clsId FOREIGN KEY(clsId) REFERENCES tb_class(clsId)
);

你可能感兴趣的:(约束和DML语句)