【08】数据库约束

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 
)

猜你喜欢

转载自blog.csdn.net/Spectre_win/article/details/88426267