正确性
和相容性
。1.提供定义完整性约束的机制
2. 提供完整性检查的方法
3. 进行违约处理
create table student(
sno char(9) primary key, // 在列级定义主码
...
);
create table student(
sno char(9)
...
primary key(sno) // 在表级定义主码
);
create table sc(
sno char(9)
cno char(10)
...
primary key(sno,cno) // 多属性主码只能在表级定义主码
);
// 非创建表时创建主码
alter table student
add constraint PK_STU
primary key clustered (sno asc)
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno, Cno),/*表级实体完整性*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/*表级定义参照完整性*/
FOREIGN KEY (Cno) REFERENCES Course(Cno)
/*表级定义参照完整性*/
);
定义
(1)属性上的约束(列级)
// not null
CREATE TABLE SC
(Sno CHAR(9) NOT NULL,
Cno CHAR(4) NOT NULL,
Grade SMALLINT NOT NULL,
PRIMARY KEY (Sno, Cno);
// unique + not null
CREATE TABLE DEPT
(Deptno NUMERIC(2),
Dname CHAR(9) UNIQUE NOT NULL,
Location CHAR(10),
PRIMARY KEY (Deptno)
);
// check
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) CHECK (Ssex IN ('男',女’) ) ,
/*性别属性Ssex只允许取'男'或'女' */
Sage SMALLINT,
Sdept CHAR(20)
);
(2)元组上的约束
元组级的限制(表级约束)可以设置不同属性之间的取值的相互约束条件
CREATE TABLE Student
(Sno CHAR(9),
Sname CHAR(8) NOT NULL,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20) default 18, // 列默认
PRIMARY KEY (Sno),
CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')
/*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/
);
检查时机
INSERT元组或UPDATE属性值时,
RDBMS自动检查
违约处理
不满足则拒绝执行
给约束命名之后,方便删除等
命名约束
修改约束
alter table student add constraint df_sex default ('男') for sex