引用完整性约束

  • 语法:CONSTRAINT 引用名 FOREIGN KEY(列名) REFERENCES 被引用表名(列名)
  • 详解: FOREIGN KEY引用外部表的某个列的值,新增数据时,约束此列的值必须是被引用表中存在的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建专业表
CREATE TABLE Speciality(
id INT PRIMARY KEY AUTO_INCREMENT,
SpecialName VARCHAR(20) UNIQUE NOT NULL
)CHARSET=utf8;
# 创建课程表(课程表中的SpecialId引用专业表的id)
CREATE TABLE SUBJECT(
subjectId INT PRIMARY KEY AUTO_INCREMENT,
subjectName VARCHAR(20) UNIQUE NOT NULL,
subjectHours INT DEFAULT 20,
SpecialId INT NOT NULL,
# 引用专业表中的id作为外键,新建课程信息时,约束课程所属的专业
CONSTRAINT fk_subject_SpecialId FOREIGN KEY(SpecialId) REFERENCES Speciality(id)
)CHARSET utf8;
# 专业表新增数据
INSERT INTO Speciality (SpecialName) VALUES ('Java');
INSERT INTO Speciality (SpecialName) VALUES ('H5');
# 课程表新增数据
INSERT INTO SUBJECT (subjectName,subjectHours,SpecialId) VALUES ('Spring',20,1)
INSERT INTO SUBJECT (subjectName,subjectHours,SpecialId) VALUES ('CSS',15,2)

个人理解:SpecialId是课程表的外键引用的是专业表中的id,引用完整性约束即受到专业表中id的限制
专业表的id不存在,则不能在课程表中添加一个不存的值(约束某一个列的值必须在另一张表中存在)
范例如图:
范例

注意:当两张表存在引用关系,要执行删除操作,一定要先删除从表 (引用表),再删除主表 (被引用表)