MySQL外键设置的方法实例

 更新时间:2021年04月08日 09:10:56   作者:Wayne  
这篇文章主要介绍了MySQL外键设置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、外键设置方法

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个表之间的关联关系。

3、连接

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

  • 内连接表示查询结果只返回符合连接条件的记录,这种连接方式比较常用;
  • 外连接则不同,表示查询结果返回某一个表中的所有记录,以及另一个表中满足连接条件的记录。

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

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
  • 必须为主表定义主键。
  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
  • 外键中列的数目必须和主表的主键中列的数目相同。
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

总结

到此这篇关于MySQL外键设置的文章就介绍到这了,更多相关MySQL外键设置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql使用insert插入多条记录 批量新增数据

    Mysql使用insert插入多条记录 批量新增数据

    这篇文章主要介绍了Mysql使用insert插入多条记录批量新增数据,需要的朋友可以参考下
    2017-08-08
  • 详解mysql触发器trigger实例

    详解mysql触发器trigger实例

    这篇文章主要为大家介绍了mysql触发器trigger实例 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • insert...on duplicate key update语法详解

    insert...on duplicate key update语法详解

    本文主要介绍了insert...on duplicate key update语法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 总结MySQL修改最大连接数的两个方式

    总结MySQL修改最大连接数的两个方式

    最大连接数是可以通过mysql进行修改的,mysql数据库修改最大连接数常用有两种方法,今天我们分析一下这两种方法之间的特点和区别,以便我们能更好的去维护mysql。下面我们来看一下mysql修改最大连接数的方法,希望文章能够帮助到各位朋友。
    2016-08-08
  • MySQL DATE_ADD和ADDDATE函数实现向日期添加指定时间间隔

    MySQL DATE_ADD和ADDDATE函数实现向日期添加指定时间间隔

    这篇文章主要介绍了MySQL DATE_ADD和ADDDATE函数实现向日期添加指定时间间隔,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • mysql实现定时备份的详细图文教程

    mysql实现定时备份的详细图文教程

    这篇文章主要给大家介绍了关于mysql实现定时备份的详细图文教程,我们都知道数据是无价,如果不对数据进行备份,相当是让数据在裸跑,一旦服务器出问题,只有哭的份了,需要的朋友可以参考下
    2023-07-07
  • MySQL5.7中 performance和sys schema中的监控参数解释(推荐)

    MySQL5.7中 performance和sys schema中的监控参数解释(推荐)

    在MySQL5.7中,performance schema有很大改进,包括引入大量新加入的监控项、降低占用空间和负载,以及通过新的sys schema机制显著提升易用性。下面通过本文给大家介绍 MySQL5.7中 performance和sys schema中的监控参数解释,需要的朋友可以参考下
    2017-08-08
  • MySQL时间差8小时的解决方案

    MySQL时间差8小时的解决方案

    本文介绍了在开发中遇到的时间问题,包括MySQL时间与系统时间不符、JDBC连接时区设置以及使用Jackson时可能出现的JSON时区问题,重点讲解了如何修改MySQL时区、设置JDBC连接参数和调整JSON日期格式的时区,需要的朋友可以参考下
    2024-07-07
  • MySQL提示表不存在的解决error:1146:Table doesn‘t exist的原因和解决方法

    MySQL提示表不存在的解决error:1146:Table doesn‘t exist的原因和解决

    在使用MySQL的过程中,有时会遇到“Table doesn't exist”(表不存在)的错误,错误代码通常为1146,这个问题可能由多种原因引起,本文将帮助你诊断和解决这个问题,如果遇到同样问题的小伙伴跟着小编一起来看看吧
    2024-12-12
  • 关于clickhouse几种create table的情况

    关于clickhouse几种create table的情况

    这篇文章主要介绍了关于clickhouse几种create table的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论