SQL 完整性约束命名子句

本文最后更新于:2024年3月18日 凌晨

SQL 完整性约束命名子句

以上讲解的完整性约束条件都在CREATE TABLE语句中定义,SQL还在CREATE TABLE语句中提供了完整性约束命名子句CONSTRAINT,用来对完整性约束条件命名,从而可以灵活地增加,删除一个完整性约束条件。

定义完整性约束命名子句

1
CONSTRAINT <完整性约束条件名> <完整性约束条件>

<完整性约束条件>包括NOT NULL,UNIQUE,PRIMARY KEY,FOREIGN KEY,CHECK短语等。

[例5.10]:建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是男或女。

1
2
3
4
5
6
7
8
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(20) CONSTRAINT C4 CHECK (Ssex IN ('男','女')),
CONSTRAINT StudentKey PRIMARY KEY (Sno)
);

在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1,C2,C3,C4这4个列级约束。

[例5.11]:建立教师表TEACHER,要求每个教师的应发工资不低于3000元,应发工资是工资列Sal与扣除项Deduct之和。

1
2
3
4
5
6
7
8
9
10
11
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 TEACHERKey FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno),
CONSTRAINT C1 CHECK (Sal+Deduct>=3000)
);

修改表中的完整性限制

可以使用ALTER TABLE语句修改表中的完整性限制。

[例5.12]:去掉例5.10Student表中对性别的限制。

1
2
ALTER TABLE Student
DROP CONSTRAINT C4;

[例5.13]:修改表Student中的约束条件,要求学号改为在90000~到99999之间,年龄由小于30改为小于40

可以先删除原来的约束条件,再增加新的约束条件。

1
2
3
4
5
6
7
8
ALTER TABLE Student
DROP CONSTRAINT C1;
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999);
ALTER TABLE Student
ADD CONSTRAINT C3;
ALTER TABLE Student
ADD CONSTRAINT C3 CHECK(Sage<40);