Alex_McAvoy

想要成为渔夫的猎手

SQL 用户定义的完整性

【属性上的约束条件】

属性上约束的定义

在 SQL 中,使用 CREATE TABLE 语句定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值的限制,包括:

  • 列值非空 NOT NULL
  • 列值唯一 UNIQUE
  • 属性值限制 CHECK(检查列值是否满足一条件表达式)

关于列值非空和列值唯一,在 SQL 基本表的数据定义 进行过介绍,下面仅介绍 CHECK 短语的用法

例如,student 表中的性别属性仅允许取男、女

1
2
3
4
5
6
7
CREATE TABLE student (
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Ssex CHAR(2) CHECK(Ssex IN ('男', '女')), /*属性值限制*/
Sage SMALLINT(6),
Sdept CHAR(20)
);

属性上约束条件的检查与违约处理

在向表中插入元组或修改属性值时,RDBMS 会检查属性上的约束条件是否满足

若不满足,则操作会被拒绝执行

【元组上的约束条件】

元组上约束条件的定义

与属性上约束条件的定义类似,在 CREATE TABLE 语句中,可以使用 CHECK 短语定义元组上的约束条件,即元组级限制

与属性值限制相比,元组级限制可以设置不同属性间取值的相互约束条件

例如,当学生性别是男时,其名字不能以 Ms. 开头

1
2
3
4
5
6
7
8
CREATE TABLE student (
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT(6),
Sdept CHAR(20),
CHECK (Ssex = '女' OR Sname NOT LIKE 'Ms.%') /*元组级限制*/
);

元组约束条件的检查与违约处理

在向表中插入元组或修改属性值时,RDBMS 会检查元组上的约束条件是否满足

若不满足,则操作会被拒绝执行

感谢您对我的支持,让我继续努力分享有用的技术与知识点!