mysql如何定义外键(MySQL外键设置的方法实例)
mysql如何定义外键
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外键设置内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://segmentfault.com/a/1190000039788432
- 怎么把csv文件导入mysql(mysql导入csv的4种报错的解决方法)
- mysql效率查询(MySQL 如何分析查询性能)
- mysql云数据库数据恢复(MySQL 利用frm文件和ibd文件恢复表数据)
- mysql8.0.26安装教程(mysql 8.0.22压缩包完整安装与配置教程图解亲测安装有效)
- mysql 高级用法(MySQL实现replace函数的几种实用场景)
- mysql触发器入门(MySQL中触发器和游标的介绍与使用)
- mysql几种连接方式(简单谈谈mysql左连接内连接)
- mysql自增主键创建过程(深入谈谈MySQL中的自增主键)
- mysql密码过期怎么改(年底了,你的mysql密码安全吗)
- mysql3种日志(mysql中的7种日志小结)
- docker怎么连接mysql(docker如何安装mysql)
- mysql从入门到实践万字详解(mysql基础知识扫盲)
- mysql查询语法总结(MySQL全面瓦解之查询的过滤条件详解)
- MySQL主从状态检查的实现(MySQL主从状态检查的实现)
- mysql索引知识点总结(MySQL 8.0 之索引跳跃扫描Index Skip Scan)
- mysql给字段加默认值(MySQL 如何处理隐式默认值)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
- 2主力后腰缺阵 泰山队奇兵有望获重用,赛季0出场,迎来中超首秀(泰山队奇兵有望获重用)
- 三分71 生死战爆发 篮网旧将丁威迪今天成奇兵,助队赢球(三分71生死战爆发)
- 《红 雄安》系列广播剧第一集 水上奇兵雁翎队(雄安系列广播剧第一集)
热门推荐
- Docker 运行多个Springboot的详细教程(Docker 运行多个Springboot的详细教程)
- 纯css和js有什么区别(CSS语法与JSON、JS对象区别比较)
- SqlServer索引的原理与应用详解(SqlServer索引的原理与应用详解)
- mysql binlog日志位置(开启MySQL的binlog日志的方法步骤)
- php服务器有哪些(php服务器的系统详解)
- docker网络通信(Google和Facebook不使用Docker的原理解析)
- python多进程创建细节(Python实现多进程的四种方式)
- 虚拟主机管理系统干什么用(五大免费主机管理系统优缺点对比及推荐)
- python 3.10 循环语法(Python3.4学习笔记之常用操作符,条件分支和循环用法示例)
- js数组去重复
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9