思维导图:
笔记:5.4 完整性约束命名子句
定义:
- 完整性约束是在
CREATE TABLE
语句中定义的。 - SQL为
CREATE TABLE
语句提供了CONSTRAINT
子句,用于对完整性约束进行命名。 - 命名的目的是方便增加或删除约束。
基本结构:
CONSTRAINT <完整性约束名称> <完整性约束条件>
其中,完整性约束条件可以是NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK等。
示例:
- 学生登记表 Student: 要求:
- 学号在 90000~99999 之间
- 姓名不为空
- 年龄小于 30
- 性别只能是 “男” 或 “女”
CREATE TABLE Student(Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),Sname CHAR(20) CONSTRAINT C2 NOT NULL,Sage NUMERIC(3) CONSTRAINT C3 CHECK(Sage<30),Ssex CHAR(2) CONSTRAINT C4 CHECK(Ssex IN('男', '女')),CONSTRAINT StudentKey PRIMARY KEY(Sno)
);
- 教师表 TEACHER: 要求:
- 每位教师的应发工资 (工资 Sal + 扣除项 Deduct) 不低于 3000 元。
CREATE TABLE TEACHER(Eno NUMERIC(4) PRIMARY KEY,Ename CHAR(10),Job CHAR(8),Sal NUMERIC(7,2),Deduct NUMERIC(7,2),Deptno NUMERIC(2),CONSTRAINT TEACHERFKey FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno),CONSTRAINT C1 CHECK(Sal + Deduct >= 3000)
);
修改表中的完整性约束:
可以使用ALTER TABLE
语句修改表中的完整性约束。
示例:
- 移除学生表 Student 对性别的约束:
ALTER TABLE Student DROP CONSTRAINT C4;
- 修改学生表 Student 的约束条件: 要求将学号的范围从 90000~99999 改为 900000~999999,并将年龄从小于30改为小于40。
ALTER TABLE Student DROP CONSTRAINT C1;
ALTER TABLE Student ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999);
ALTER TABLE Student DROP CONSTRAINT C3;
ALTER TABLE Student ADD CONSTRAINT C3 CHECK (Sage < 40);
完整性约束命名子句 - 重点、难点与易错点总结
重点:
-
定义与用途:
- 完整性约束命名子句用于为
CREATE TABLE
语句中的完整性约束赋予名称,以便于后续操作(如增加、删除)。
- 完整性约束命名子句用于为
-
基本结构:
CONSTRAINT <完整性约束名称> <完整性约束条件>
-
完整性约束条件类型:
NOT NULL
: 字段值不可为空UNIQUE
: 字段值必须唯一PRIMARY KEY
: 定义表的主键FOREIGN KEY
: 外键约束,确保字段的值在另一个表中存在CHECK
: 对字段值施加特定条件
难点:
-
外键约束的理解与应用:
- 外键是连接两张表的一种手段,它确保一张表中的字段值在另一张表的特定列中存在。正确实现外键约束需要对两张表都有深入了解。
-
复杂的CHECK约束:
- 创建复杂的条件(如,工资与扣除之和的限制)需要对逻辑表达式有很好的理解。
易错点:
-
命名重复:
- 为完整性约束命名时,要确保名称在整个数据库中是唯一的。重复的命名会导致错误。
-
错误的数据类型匹配:
- 在应用完整性约束时,要确保约束条件与字段的数据类型相匹配。例如,不应该在字符型字段上设置数值范围。
-
遗漏或误用单引号:
- 在CHECK约束中,特定的值(如
'男'
或'女'
)需要使用单引号。遗漏或误用会导致语法错误。
- 在CHECK约束中,特定的值(如
-
不恰当地删除约束:
- 在修改表结构时,可能需要删除并重新添加某些约束。如果不小心删除了错误的约束,可能会导致数据完整性问题。
-
外键参照的表和字段存在性:
- 在设置外键约束时,必须确保引用的表和字段真实存在,否则会导致错误。