MySQL5.5多表之外键(二)

什么是外键?

外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。

外键用于建立和加强两个表数据之间的连接。

翻译一下:设置外键就是以表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、保存临时的数据,并且可以毫不费力地通过删除该表而删除这些数据。

本文多出自于传智播客教学内容。

你可能感兴趣的:(MySQL5.5多表之外键(二))