五、创建外键约束,保证数据的完整性和一致性
外键的定义: 如果同一个属性字段x在表一中是主键,而在表二中不是主键,则字段x称为表二的外键。
外键的作用:
- 为了一张表记录的数据不要太过冗余。
- 保持数据的一致性、完整性。
主键表和外键表的理解:
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)
注意:
- 与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。
- 添加外键时必须关联主键(即主表先要添加主键,之后从表再添加外键)
5.1 创建主键表和外键表
创建主键表和外键表:
#创建主表class create table class (cid int,cname varchar(10)); #创建从表student create table student (id int,name varchar(10),age int,classid int); #为主表class的cid字段添加一个主键约束。constraint为主键创建别名,主键名建议以“PK_”开头。 alter table class ADD constraint PK_CID primary key (cid); #为从表student的classid字段添加外键,并将student 表的classid字段和class 表的cid字段建立外键关联。外键名建议以"FK_”开头。 #references关联主键表中的字段。 alter table student ADD constraint FK_CLASSID foreign key (classid) references class(cid); #添加外键时必须关联主键(即先要添加主键,再添加外键) #添加主键和外键时,即使不设置别名,系统也会自动创建一个别名。 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
为两个表插入数据:
INSERT INTO class values(1,'钢琴'); #为主表插入数据 INSERT INTO student values(1,'张三',18,1); #为从表插入数据 INSERT INTO student values(2,'李四',18,2); #这条数据会插入失败,因为主表的cid字段没有为2的值 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
5.2 删除主键表中的数据记录
如果想删除主键表中的某条记录,必须先删除外键表中相关联的字段记录。
#删除数据记录时,要先删从表再删主表。也就是说删除主键表的记录时,必须先删除其他与之关联的表中的记录。 delete from student where classid=1; //先删从表的数据 delete from class where cid=1; //再删主表的数据 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
5.3 查看和删除外键约束
第一步删除外键约束,第二步删除别名。
#查看外键约束 show create table student; desc student; #删除外键约束。 alter table student drop foreign key FK_CLASSID; //先删除外键约束 alter table student drop key FK_CLASSID; //再删除键(即删除别名) 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|