CREATE TABLE SC(
SNO CHAR(7) NOT NULL,
CNO CHAR(4) NOT NULL,
GRADE SMALLINT CHECK (GRADE>0 AND GRADE<100), /*CHECK
语句约束
条件*/
PRIMARY KEY (SNO,CNO),
FOREIGN KEY (SNO) REFERENCES STUDENT(SNO),
FOREIGN KEY (CNO) REFERENCES COURSE(CNO));
[例 4]用户定义的元组上的约束条件。
CHECK 短语不光能够定义属性列上的约束条件,还允许用户定义元组级
的约束条件。
定义表 Student,要求当学生性别为男时,其名字不能以 Ms.打头。
CREATE TABLE STUDENT(
SNO CHAR(7) PRIMARY KEY,
SNAME CHAR(8) NOT NULL,
SSEX CHAR(2),SAGE SMALLINT,
SDEPT CHAR(20),CHECK (SSEX = ‘ 女 ’ OR SNAME NOT LIKE
‘Ms.%’)); /*定义了 Sname 和 Ssex 之间的约束条件*/
4.CONSTRAINT 完整性约束命名子句
[例 5]在定义表时利用约束命名子句对完整性约束条件命名,能够灵活地增加或
删除一个完整性约束条件。
[例 5-1]定义表 Student,要求学号在 90000-99999 之间,姓名不能取空值,年
龄小于 30,性别只能是“男”或“女”。要求全部用约束命名子句实现。
CREATE TABLE STUDENT(
SNO NUMERIC(5)
CONSTRAINT C1 CHECK (SNO BETWEEN 90000 AND 99999),
SNAME VARCHAR(20)
CONSTRAINT C2 NOT NULL,
SAGE NUMERIC(3)
CONSTRAINT C3 CHECK (SAGE < 30),
SSEX VARCHAR(2)
CONSTRAINT C4 CHECK (SSEX IN (‘男’,’女’)),
CONSTRAINT StudentKey PRIMARY KEY(SNO));
在 表 Student 上 共 定 义 了 5 个 约 束 条 件 , 包 括 主 码 约 束 以 及
C1、C2、C3、C4 四个列级约束。
[例 5-2]修改表 Student 中的完整性限制,去掉对性别的限制,并将年龄的限制
由小于 30 改为小于 40。
ALTER TABLE STUDENT/*去掉对性别的限制条件 C4*/
DROP CONSTRAINT C4;
ALTER TABLE STUDENT/*先删掉原来的约束条件再增加一个新的约束条
件*/
DROP CONSTRAINT C3;