本文最后更新于: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);
|