MySQL外键设置的方法实例

作者:Wayne 时间:2024-01-19 14:10:42 

一、外键设置方法

1、在MySQL中,为了把2个表关联起来,会用到2个重要的功能:外键(FOREIGN KEY)和连接(JOIN)。外键需要在创建表的阶段定义,连接可以通过相同意义的字段把2个表连接起来,用在查询阶段。

2、假设有2个表,分别是表A和表B,它们通过一个公共字段id 发生关联关系,我们把这个关联关系叫做R。如果id在表A中是主键,那么表A就是这个关系R中的主表,相应的,表B就是这个关系中的从表,表B中的id,就是表B用来引用表A中数据的,叫外键。所以,外键就是从表中用来引用主表中数据的那个公共字段。

创建主表


CREATE TABLE demo.importhead (
listnumber INT PRIMARY KEY,
supplierid INT,
stocknumber INT,
importtype INT,
importquantity DECIMAL(10 , 3 ),
importvalue DECIMAL(10 , 2 ),
recorder INT,
recordingdate DATETIME);

创建从表


CREATE TABLE demo.importdetails(
listnumber INT,
itemnumber INT,
quantity DECIMAL(10,3),
importprice DECIMAL(10,2),
importvalue DECIMAL(10,2), -- 定义外键约束,指出外键字段和参照的主表字段
CONSTRAINT fk_importdetails_importhead
FOREIGN KEY (listnumber) REFERENCES importhead (listnumber)
);

运行这个SQL语句,我们就在创建表的同时定义了一个名字叫fk_importdetails_importhead的外键约束,同时,我们声明,这个外键约束的字段listnumber引用的是表importhead里面的字段listnumber。

创建完成后,我们可以通过SQL语句来查看,这里我们要用到MySQL自带的、用于存储系统信息的数据库:

information_schema。我们可以查看外键约束的相关信息:

外键约束所在的表是importdetails,外键字段是listnumber

参照的主表是importhead,参照主表字段是listnumber,

这样通过定义外键约束,我们已经建立起了2个表之间的关联关系。

MySQL外键设置的方法实例

3、连接

在MySQL中有2种类型的连接,分别是内连接(INNER JOIN)和外连接(OUTER JOIN)

  • 内连接表示查询结果只返回符合连接条件的记录,这种连接方式比较常用;

  • 外连接则不同,表示查询结果返回某一个表中的所有记录,以及另一个表中满足连接条件的记录。

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

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

  • 必须为主表定义主键。

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

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

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

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

总结

来源:https://segmentfault.com/a/1190000039788432

标签:mysql,外键,设置
0
投稿

猜你喜欢

  • JPA之映射mysql text类型的问题

    2024-01-17 06:38:41
  • sqlserver/mysql按天、按小时、按分钟统计连续时间段数据【推荐】

    2024-01-27 14:23:20
  • linux系统使用python获取内存使用信息脚本分享

    2022-10-14 07:50:53
  • SQLServer 使用rand获取随机数的操作

    2024-01-24 00:22:11
  • 使用python telnetlib批量备份交换机配置的方法

    2022-08-17 02:24:00
  • Go编写定时器与定时任务详解(附第三方库gocron用法)

    2024-05-09 09:40:19
  • Python 实现Numpy中找出array中最大值所对应的行和列

    2021-08-11 06:55:35
  • 无序列表 li ul

    2008-07-29 13:00:00
  • Django 自动生成api接口文档教程

    2022-09-11 06:40:26
  • python ftp 按目录结构上传下载的实现代码

    2021-01-28 00:38:33
  • 用javascript实现的仿Flash广告图片轮换效果

    2024-04-19 09:59:29
  • PHP-FPM运行状态的实时查看及监控详解

    2023-11-22 22:45:22
  • mysql出现10061错误解决办法

    2010-07-04 13:36:00
  • Python初识逻辑与if语句及用法大全

    2023-11-21 16:17:24
  • python GUI编程实现扫雷游戏

    2023-10-27 20:41:29
  • Python利用Pytorch实现绘制ROC与PR曲线图

    2022-09-20 03:24:20
  • Go语言七篇入门教程七GC垃圾回收三色标记

    2024-05-05 09:28:45
  • 详解Python描述符的工作原理

    2022-03-16 19:02:59
  • django admin添加数据自动记录user到表中的实现方法

    2022-11-17 14:58:24
  • GoLang调用链可视化go-callvis使用介绍

    2023-07-16 06:39:59
  • asp之家 网络编程 m.aspxhome.com