引用完整性约束
- 语法:CONSTRAINT 引用名 FOREIGN KEY(列名) REFERENCES 被引用表名(列名)
- 详解: FOREIGN KEY引用外部表的某个列的值,新增数据时,约束此列的值必须是被引用表中存在的值。
| 12
 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不存在,则不能在课程表中添加一个不存的值(约束某一个列的值必须在另一张表中存在)
范例如图:

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