美文网首页
MySQL5.5多表之外键(二)

MySQL5.5多表之外键(二)

作者: 三斤耳朵 | 来源:发表于2017-11-05 22:52 被阅读515次

    什么是外键?

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

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

    翻译一下:设置外键就是以表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多表之外键(二)

          本文链接:https://www.haomeiwen.com/subject/hfghmxtx.html