MySQL多表操作的外键约束教程

作者:阳862 时间:2024-01-26 01:58:56 

一.多表关系

MySQL多表之间的关系可以概括为:一对一、一对多/多对一关系,多对多

一对一关系

一个学生只有一张身份证;一张身份证只能对应一学生。
在任一表中添加唯─外键,指向另一方主键,确保一对一关系。
一般一对一关系很少见,遇到一对一关系的表最好是合并表。

MySQL多表操作的外键约束教程

一对多/多对一关系

部门和员工
分析:一个部门有多个员工,一个员工只能对应一个部门实现原则:在多的一方建立外键,指向一的一方的主键

MySQL多表操作的外键约束教程

多对多关系

学生和课程
分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择
原则:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,将多对多的关系,拆成一对多的关系,中间表至少要有两个外键,这两个外键分别指向原来的那两张表的主键

MySQL多表操作的外键约束教程

二.外键约束

MySQL外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等4种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。

MySQL多表操作的外键约束教程

特点

定义一个外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。

  • 必须为主表定义主键。

  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

  • 外键中列的数目必须和主表的主键中列的数目相同。

  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

创建外键约束

方式1-在创建表时设置外键约束

在create table语句中,通过foreign key关键字来指定外键,具体的语法格式如下:

MySQL多表操作的外键约束教程

MySQL多表操作的外键约束教程

MySQL多表操作的外键约束教程

use world;
-- 创建部门表
create table if not exists dept(
 deptno varchar(20) primary key ,  -- 部门号
 name varchar(20) -- 部门名字
);

-- 创建员工表
create table if not exists emp2(
 eid varchar(20) primary key , -- 员工编号
 ename varchar(20), -- 员工名字
 age int,  -- 员工年龄
 dept_id varchar(20),  -- 员工所属部门
 constraint emp2_fk foreign key (dept_id) references dept(deptno)
);

方式2-在创建表时设置外键约束

外键约束也可以在修改表时添加,但是添加外键约束的前提是:从表中外键列中的数据必须与主表中主键列中的数据一致或者是没有数据。

MySQL多表操作的外键约束教程

MySQL多表操作的外键约束教程

use world;
-- 创建部门表
create table if not exists dept(
 deptno varchar(20) primary key ,  -- 部门号
 name varchar(20) -- 部门名字
);

-- 创建员工表
create table if not exists emp2(
 eid varchar(20) primary key , -- 员工编号
 ename varchar(20), -- 员工名字
 age int,  -- 员工年龄
 dept_id varchar(20),  -- 员工所属部门
 constraint emp2_fk foreign key (dept_id) references dept(deptno)
);

在外键约束下的操作

1.数据插入

MySQL多表操作的外键约束教程

2.删除数据

MySQL多表操作的外键约束教程

3.删除外键约束

当一个表中不需要外键约束时,就需要从表中将其删除。外键一旦删除,就会解除主表和从表间的关联关系

格式

MySQL多表操作的外键约束教程

实现

MySQL多表操作的外键约束教程

外键约束-多对多关系

在多对多关系中,A表的一行对应B的多行,B表的一行对应A表的多行,我们要新增加一个中间表,来建立多对多关系。

MySQL多表操作的外键约束教程

操作

MySQL多表操作的外键约束教程

MySQL多表操作的外键约束教程

修改和删除时,中间从表可以随便删除和修改,但是两边的主表受从表依赖的数据不能删除或者修改。

来源:https://blog.csdn.net/weixin_63318044/article/details/128798816

标签:mysql,外键,约束,多表
0
投稿

猜你喜欢

  • 用CSS3将你的设计带入下个高度[译]

    2009-06-22 13:03:00
  • Vue子组件内的props对象参数配置方法

    2024-04-30 10:39:09
  • pytorch .detach() .detach_() 和 .data用于切断反向传播的实现

    2022-01-30 21:24:56
  • Python必须了解的35个关键词

    2023-05-20 07:37:33
  • Mysql联合查询UNION和UNION ALL的使用介绍

    2024-01-17 22:14:08
  • centos下mysql主从复制设置详解

    2024-01-20 23:27:06
  • Python中pip安装非PyPI官网第三方库的方法

    2021-01-20 15:51:18
  • pyqt5与matplotlib的完美结合实例

    2022-01-09 12:23:59
  • JavaScript ParseFloat()方法

    2024-04-29 13:35:48
  • 浅谈webpack打包过程中因为图片的路径导致的问题

    2024-04-28 09:42:38
  • python 实现视频流下载保存MP4的方法

    2021-09-13 06:31:38
  • MySQL创建带特殊字符的数据库名称方法示例

    2024-01-26 15:31:30
  • SQL按照日、周、月、年统计数据的方法分享

    2024-01-24 13:48:27
  • 如何使用Python基于接口编程的方法实现

    2023-12-24 20:15:41
  • Python NumPy库安装使用笔记

    2022-05-20 17:49:56
  • pycharm 实现光标快速移动到括号外或行尾的操作

    2023-07-17 19:52:31
  • Python爬虫之Selenium实现键盘事件

    2022-08-28 03:40:37
  • python 统计代码耗时的几种方法分享

    2023-11-03 19:51:06
  • PHP中关于php.ini参数优化详解

    2024-05-13 09:51:31
  • vue.js实现简易折叠面板

    2024-05-08 09:33:47
  • asp之家 网络编程 m.aspxhome.com