引用完整性约束
- 语法: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不存在,则不能在课程表中添加一个不存的值(约束某一个列的值必须在另一张表中存在)
范例如图:
注意:当两张表存在引用关系,要执行删除操作,一定要先删除从表 (引用表),再删除主表 (被引用表)