O:数据集合 约束的对象(列,元组,元祖集合)
P:谓词条件:什么样的约束?
A:触发条件:什么时候检查?
R:响应动作:不满足时怎么办?
一种域约束类型,对单一列的值进行约束
{not null
[constraint constraintname] #为约束命名
{
unique #列值唯一
primary key #列为主键
check(search_cond) #列值满足条件,条件只能使用列当前值
references tablename[(colname)]
[on delete{cascade|set null}]#引用另一表tablename的列colname的值,如有ON DELETE CASCADE 或ON DELETE SETNULL语句,则删除被引用表的某列值v 时,要将本表该列值为v 的记录删除或列值更新为null;缺省为无操作 。
}
}
示例:
create table student
(
sno char(8) not null unique,
sname char(10),
ssex char(2),
constraint ctssex check(ssex in ('男','女')),
sage integer check(sage>=1 and sage<150),
Dno char(2)
references dept(Dno) on delete cascade,
sclass char(6)
);
一种关系约束类型,对多列或元组值进行约束
CONSTRAINT constraintname #为约束命名,便于以后撤消
UNIQUE (colname {, colname. . .}) #几列值组合在一起是唯一
PRIMARY KEY (colname {, colname. . .}) #几列联合为主键
CHECK (search_condition) #元组多列值共同满足条件,条件中只能使用同一元组的不同列当前值
FOREIGN KEY (colname {, colname. . .})REFERENCES tablename [(colname {, colname. . .})][ON DELETE CASCADE] }#引用另一表tablename的若干列的值作为外键
示例:
create table student
(
sno varchar(10),
sname varchar(8),
ssex varchar(2),
sclass varchar(10),
email varchar(20),
unique(sno), #插入相同的sno将会报错
unique(sname,email)#插入sname,email都相同将会报错
)
Create Table Course
(
Cno char(3) ,
Cname char(12),
Chours integer,
Credit float(1),
constraint ctcredit check (Credit >=0.0 and Credit<=5.0 ),
Tno char(3)
references Teacher(Tno) on delete cascade,
primary key(Cno),
constraint ctcc check(Chours/Credit = 20)
);
撤消或追加约束的语句是 Alter Table
示例:撤销course表中的主键约束再添加主键约束
alter table clus drop primary key;#删除
alter table clus add primary key(Cno);#添加