目录
1 实体完整性
1.1 单属性
1.2 多属性
2 参照完整性
2.1 单属性
2.2 多属性
3 用户自定义完整性
3.1 属性上的约束
3.2 元组上的约束
1 实体完整性
1.1 单属性
①定义
use 实体完整性_单属性;
create table Student_s_d(
Sno char(9) primary key,
Sname varchar(20) not null,
Ssex char(2),
Sedpt varchar(20)
);
②检验
主码为空不能插入
insert into Student_s_d
values (null, '小明', '男', '计通学院');
主码不唯一不能插入
insert into student_s_d
values (123456789, '小明', '男', '计通学院'),
(123456789, '小红', '女', '化学院');
③删除
alter table student_s_d drop primary key;
④修改
alter table student_s_d add primary key(Sno);
1.2 多属性
①定义
use 实体完整性_多属性;
create table SC_s_d(
Sno char(2),
Cno char(4),
Grade smallint,
primary key(Sno, Cno)
);
②检验
主码不能为空
insert into sc_s_d
values (null, null, 66);
两个主码相同不能插入
insert into sc_s_d
values (99, 2222, 12),
(99, 2222, 13);
③删除
alter table sc_s_d drop primary key;
④修改
alter table sc_s_d add primary key(Sno, Cno);
2 参照完整性
2.1 单属性
①定义
use 参照完整性_单属性;
create table Student_c_d
(
Sno char(2),
Sname varchar(20),
Ssex char(2),
Sage int,
Department varchar(20)
);
CREATE INDEX idx_student_c_d_Sno ON student_c_d (Sno);
insert into Student_c_d(sno, sname, ssex, sage, department)
values (21, '张三', '男', 18, '计通学院'),
(04, '李四', '男', 19, '化学院'),
(02, '翠花', '女', 18, '文新学院');
create table SC_c_d
(
Sno char(2) not null,
Cno char(2) not null,
Performance float not null,
foreign key(Sno) references Student_c_d(Sno)
);
②检验
不能在sc_c_d中插入student_c_d中不存在的Sno
insert into sc_c_d
values (22, 11, 66);
不能在sc_c_d中修改student_c_d中不存在的Sno
insert into sc_c_d
values (21, 11, 66);
update sc_c_d set Sno = '22' where Sno = '21';
不能修改student_c_d中Sno在sc_c_d中存在的Sno
update student_c_d set Sno = '22' where Sno = '21';
③删除
alter table sc_c_d
drop foreign key sc_c_d_ibfk_1;
④修改
create table Course_c_d
(
Cno char(2) not null,
Cname varchar(20),
Cprepare varchar(20),
Ccredit float
);
CREATE INDEX idx_course_c_d_Cno ON course_c_d (cno);
delete from sc_c_d;
alter table sc_c_d
add constraint foreign key(Cno) references course_c_d(Cno);
2.2 多属性
①定义
use 参照完整性_多属性;
create table Student_c
(
Sno char(2),
Sname varchar(20),
Ssex char(2),
Sage int,
Department varchar(20)
);
CREATE INDEX idx_student_c_Sno ON student_c (Sno);
insert into Student_c(sno, sname, ssex, sage, department)
values (21, '张三', '男', 18, '计通学院'),
(04, '李四', '男', 19, '化学院'),
(02, '翠花', '女', 18, '文新学院');
create table Course_c
(
Cno char(2) not null,
Cname varchar(20),
Cprepare varchar(20),
Ccredit float
);
CREATE INDEX idx_course_c_Cno ON course_c (cno);
insert into course_c(cno, cname, cprepare, ccredit)
values (11, '概率论', '高等数学', 3),
(12, '数字电路', '离散结构', 2.5),
(13, '数据结构', '离散结构', 3.5),
(01, '嵌入式', '数字电路', 2);
create table SC_c
(
Sno char(2) not null,
Cno char(2) not null,
Performance float not null,
foreign key(Sno) references Student_c(Sno),
foreign key(Cno) references Course_c(cno)
);
②检验
不能在sc_c中插入student_c中不存在的Sno
insert into sc_c
values (11, 12, 66);
不能修改course_c中cno在sc_c中存在的cno
insert into sc_c
values (21, 13, 33);
update course_c set Cno = '14' where Cno = '13';
③删除
alter table sc_c
drop foreign key sc_c_ibfk_2;
④修改
alter table sc_c
add constraint foreign key(Cno) references course_c(cno);
3 用户自定义完整性
3.1 属性上的约束
①定义
use 用户完整性;
create table student_yh(
Sno char(2) unique not null,
Sname varchar(20) not null,
Ssex char(2) check(Ssex in('男', '女')),
Sage int,
Department varchar(20)
);
②检验
Unique的检验
insert into student_yh
values (11, '小明', '男', 11, '计通学院'),
(11, '小红', '女', 12, '化学院');
Not null的检验
insert into student_yh
values(11, null, '男', 11, '计通学院');
Check的检验
insert into student_yh
values(11, '小明', '中', 11, '计通学院');
3.2 元组上的约束
①定义
use 用户完整性_元组;
create table student_yh_yz(
Sno char(2),
Sname varchar(20) not null,
Ssex char(2),
Sage int,
Department varchar(20),
check ( Ssex = '女' or Sname not like 'Ms.%')
);
②检验
insert into student_yh_yz
values (11, 'Ms.小明', '男', 11, '计通');