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