美文网首页
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多表之外键(二)

    什么是外键? 外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。 外键用于建立和加强两个...

  • MySQL5.5多表之外键(一)

    MySQL5.5在学习外键时第一个要关注的点就是我们数据库的数据引擎,要知道 MyISAM was the def...

  • MySQL 基础 4 多表设计之外键约束

    1.1 约束 1.1.1 约束的作用   约束是用来保证数据的完整性。 1.1.2 单表约束 主键约束 唯一约束 ...

  • MySQL5.5多表之连接查询

    连接查询 关系型数据库管理系统中,通常将每个实体的所有信息存放在一张表中,当查询数据时,通过连接操作查询多个表中的...

  • MySQL操作-2 (笔记)

    1.多表关系维护 外键约束:forerign key 给product 添加一个外键约束 多表建表原则 一对一 一...

  • SQL多表查询高级应用

    SQL多表查询 多表连接示范 两张表t_user t_judge 给两张表设置外键约束查询内容 SQL多表查询 多...

  • 09_MySQL多表 & JDBC

    MySQL多表 外键 主表主键和从表外键 ==(从表的外键引用主表的主键)== 从表的外键类型必须和主表的主键类型...

  • mysql 多表关联创建外键

    逻辑外键是数据库体现不出来的。物理外键是数据库知道的 一、多表关联-外键: 代码1: Foreign前面不写东西,...

  • Mysql多表查询

    Mysql多表查询 转自多表联合查询 内连接表间主键和外键相连,取得键值相同的记录.从双方的表中取得键值相同的记录...

  • XUtils3框架之数据库操作

    如何创建删除一张表 如何对表进行增删查改操作如何创建数据库和删除数据库建立一表对一表,多表对一表,多表对多表的外键...

网友评论

      本文标题:MySQL5.5多表之外键(二)

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