什么是外键?
外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。
外键用于建立和加强两个表数据之间的连接。
翻译一下:设置外键就是以表A中的一列或多列数据,约束表B中的数据。
以班级和教师表格为例,指的是以班级表中的班级名为约束,约束学生表格中的班级名。
create table class(
id int primary key auto_increment,
classname varchar(20) not null unique
);
create table student(
id int primary key auto_increment,
name varchar(20) not null,
classid int not null
);
我们创建出表格以后,这两个表中的班级存在这明显的联系,(class(classname) 、student(class)),这就需要我们在原有表格的基础上,再新建一个外键作为两个表格之间的联系,那如何为两个表格之间添加外键呢?
如何添加外键?
1、为已有的两个表格添加外键
ALTER TABLE table_name1(被约束列表名) ADD CONSTRAINT foreign_key_name(外键名) FOREIGN KEY(fk_name(被外键约束列名)) REFERENCES table_name2(约束列表明)(fk_name2(外键约束列名));
ALTER TABLE student ADD CONSTRAINT cs FOREIGN KEY(classid) REFERENCES class(id);
2、在创建表格的同时创建外键
KEY ‘cs’ ('classid'),
CONSTRAINT cs FOREIGN KEY ('classid') REFERENCES 'class'('id')
在添加外键完成以后,一定要验证外键,避免导入数据以后发现问题。
INSERT INTO student (name , classid) VALUES ('张三','1');
如果外键设置成功以后,关于插入该数据,会报出1452的错误,这种情况才是成功设置外键的效果。
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`day1111`.`student`, CONSTRAINT `cs` FOREIGN KEY (`classid`) REFERENCES `class` (`id`))
何如删除外键?
ALTER TABLE table_name(表名) DROP FOREIGN KEY foreign_key_name(外键名);
ALTER TABLE student DROP FOREIGN KEY cs;
添加外键的参数说明:
【ON DELETE || ON UPDATE {CASCADE || SET NULL || NO ACTION || RESTRICT}】
删除||修改 包含与已删除键值有参照关系的所有记录
包含与已删除键值有参照关系的所有记录,删除以后用NULL补位
不进行任何操作
拒绝主表删除或修改外键关联列,这个是默认设置,也是最安全的设置。
外键设计规则:
1:N(一对多)
我们的班级和学生表就是一对多的关系,一个班级对应着好多学生,但是一个学生只能对应着一个班级,在这种情况下,我们的表格设计就是一对多的形式。
一对多的形式,不论是从逻辑关系的角度还是从软件开发中的难易的角度,都是以一的一方作为约束方,以多的一方作为被约束方,这个内容就记住上边的案例就可以了。
N:N(多对多)
现实中见到的最多的形式,就应该是多对多的形式,我们可以以教师和学生的例子做记忆。
这种形式就要求我们在原有两张表格的基础上,再新建一张表格,将关联数据的两方联系到一起。
1:1(一对一)
一对一的形式在数据库中并不常见,大部分都写在一个表格中了。主要用在个别的几个情况下:
1、分割具有很多列的表
2、由于安全原因而隔离表的一部分
3、保存临时的数据,并且可以毫不费力地通过删除该表而删除这些数据。
本文多出自于传智播客教学内容。
网友评论