数据的完整性是指数据的可靠性和准确性.它分四类:
1.实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过索引,唯一约束,主键约束或标识列属性).
2.域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则).
3.引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系.引用完整性确保键值在所有表中一致.这样的一致辞性要求不能引用不存在的值.如果一个键值更改了,那么在整个数据库中,对该键值的引用要进行一致的更改.
4.自定义完整性:用户自己定义的业务规则.
约束和数据完整性
主键(Primary key)
外键(Foreign key)
唯一(unique)
检查(check):MySQL不支持。
默认(default)
1、约束
create table s(sno char(2) not null primary key,
sname char(10) null,
sex char(2) null default '男'
check(sex='男' or sex='女') ,
birthday datetime null,
id char(18) null unique);
create table c (cno char(2) not null primary key,
cname char(10) null);
create table sc(sno char(2) not null references s(sno),(mysql不支持这样写)
cno char(2) not null references c(cno),
score decimal(5,1) null check(score>=0 and score<=100),
primary key(sno,cno) );
2、另一种约束
create table s(sno char(2) not null ,
sname char(10) null,
sex char(2) null default '男',
birthday datetime null,
id char(18) null , primary key(sno), unique(id),
check(sex='男' or sex='女')
);
create table c (cno char(2) not null ,
cname char(10) null, primary key(cno));
create table sc(sno char(2) not null ,
cno char(2) not null ,
score decimal(5,1) null , primary key(sno,cno),
foreign key(sno) references s(sno) on delete cascade on update cascade,
foreign key(cno) references c(cno),
check(score>=0 and score<=100)
);
3、第三种约束
create table s(sno char(2) not null ,
sname char(10) null,
sex char(2) null default '男' ,
birthday datetime null,
id char(18) null
);
create table c (cno char(2) not null ,
cname char(10) null
);
create table sc(sno char(2) not null ,
cno char(2) not null ,
score decimal(5,1) null
);
alter table s
add constraint pk_sno primary key(sno),
add constraint uq_id unique(id),
add constraint ck_sex check(sex=‘男’ or sex=‘女’);
alter table c
add constraint pk_cno primary key(cno);
alter table sc
add constraint pk_sc primary key(sno,cno),
add constraint ck_score check(score>=0 and score<=100),
add constraint fk_sno foreign key(sno) references s(sno),
add constraint fk_cno foreign key(cno) references c(cno);