文章目录
1. 约束作用
表虽然建立完成了,但是表中的数据是否合法并不能有所检查,而如果要想针对于表中的数据
做一些过滤的话,则可以通过约束完成,
约束的主要功能是保证表中的数据合法性。
2. 约束分类
非空约束、唯一约束主键约束、检查约束、外键约束.
2.1 非空约束(NOT NULL): NL
当数据表中的某个字段上的内容不希望设置为 ull 的话,则可以使用 NOT NULL 进行指定。
DROP TA BLE member PURGE;
CREATE TABLE member(
mid number,
name varchar2(50) not null
)
2.2 唯一约束(UNIQUE): UK
唯一约束指的是每一个列上的数据是不允许重复的,例如: email 地址每个用户肯定是不重复
的,那么就使用唯一约束完成。
DROP TA BLE member PURGE;
CREATE TABLE member(
mid number,
name varchar2(50) not null,
email varchar(200) UNIQUE
)
2.3 主键约束(Primary Key): PK
主键约束 = 非空约束+唯一约束,
主键约束不能为空!!!
范例:建立主键约束
DROP TABLE member PURGE;
CREATE TABLE member(
mid number,
name varchar2(50) not null,
CONSTRAINT pk_mid PRIMARY KEY (mid)
)
正常的开发角度而言,一张表一般都只设置一个主键,但是从 SQL 语法的规定而言,一张
表却可以设置多个主键而此种做法称为复合主键。
DROP TABLE member PURGE;
CREATE TABLE member(
mid number,
name varchar2(50) not null,
CONSTRAINT pk_mid_name PRIMARY KEY (mid,name)
)
【注意】只要是数据表,永远都只设置一个主键。
2.4 检查约束(Check): CK
检查约束指的是为表中的数据增加一些过滤条件,例如:
- 设置年龄的时候范围是:0~250
- 设置性别的时候应该是:男、女、中
- 范例:设置检查约束
DROP TABLE member Purge.
CREATE TABLE member(
mid number,
name varchar2(50) not null,
sex varchar2(10) not null,
age number(3),
CONSTRAINT pk_mid PRIMARY KEY (mid),
CONSTRAINT ck_sex CHECK(sex IN(‘男’,‘女’,’ 中’)),
CONSTRAINT ck_age CHECK(age between 0 and 250)
);
2.5 主-外键约束(核心难点)
之前的四种约束都是在单张表中进行的,而主外键约束是在两张表中进行的,这两张表是存在
父子关系的,即:子表中某个宇段的取值范围由父表所决定。
例如,现在要求表示出一种关系,每一个人有多本书,应该定义两张数据表: member(主),book
(子)。
DROP TABLE member Purge;
DROP TABLE book purge;
CREATE TABLE member(
mid number,
name varchar2(50) not null,
CONSTRAINT PK_MID PRIMARY KEY(mid)
)
CREATE TABLE book(
bid number,
title varchar2(50) not null,
mid number,
CONSTRAINT pk_bid PRIMARY KEY(bid),
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid)
)
-
约束的级联操作
- on update cascade
- on update set null
- on delete cascade
- on delete set null
-
级联删除
如果说现在希望主表数据删除之后,子表中对应的数据也可以删除的话,则可以在建立外键约束的时候,指定一个级联删除功能:
DROP TABLE member Purge;
DROP TABLE book purge;
CREATE TABLE member(
mid number,
name varchar2(50) not null,
CONSTRAINT PK_MID PRIMARY KEY(mid)
)
CREATE TABLE book(
bid number,
title varchar2(50) not null,
mid number,
CONSTRAINT pk_bid PRIMARY KEY(bid),
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid) ON DELETE CASCADE
)
- 删除数据的时候,让字表中对应的数据设置为 null
当主表中的数据删除之后,对应的子表中的数据相关项也希望将其设置为 null,而不是删除:
DROP TABLE member Purge;
DROP TABLE book purge;
CREATE TABLE member(
mid number,
name varchar2(50) not null,
CONSTRAINT PK_MID PRIMARY KEY(mid)
)
CREATE TABLE book(
bid number,
title varchar2(50) not null,
mid number,
CONSTRAINT pk_bid PRIMARY KEY(bid),
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid) ON DELETE SET NULL
)