iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql支持外键吗
  • 181
分享到

mysql支持外键吗

2024-04-02 19:04:59 181人浏览 薄情痞子
摘要

本篇内容主要讲解“Mysql支持外键吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql支持外键吗”吧! mysql支持外键。

本篇内容主要讲解“Mysql支持外键吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习mysql支持外键吗”吧!

mysql支持外键。在MySQL中,外键主要用来建立主表与从表的关联关系,可以为两个表的数据建立连接,约束两个表中数据的一致性和完整性;当主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值;且外键中列的数目和对应数据类型必须和主表的主键中的相同。

教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

mysql支持外键。

MySQL外键(FOREIGN KEY)

外键是指定表中与另一个表的另一个字段匹配的字段。外键对相关表中的数据设置了约束,这使MySQL能够保持参照完整性。

外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

我们来看看示例数据库中的以下数据库图。

mysql支持外键吗

我们有两个表:customers和orders, 每个客户都有零个或多个订单,每个订单只能属于一个客户。customers表和orders表之间的关系是一对多的,它orders由customerNumber字段指定的表中的外键建立。customers表中的customerNumber字段与orders表中的customerNumber主键字段相关 。

customers 表称为父表或引用表,orders表称为子表或引用表。

外键可以是一个列或一组列。子表中的列通常引用父表中的主键列。

表可以具有多个外键,子表中的每个外键可以引用不同的父表。

子表中的行必须包含父表中存在的值,例如,orders表中的每个订单记录必须具有customers表customerNumber中存在的值。因此,多个订单可以引用同一个客户,这种关系称为一个(客户)到多个(订单)或一对多。

有时,子表和父表是相同的。外键引用表的主键,例如,下employees表:

mysql支持外键吗

reportTo列是一个外键,它引用employeeNumber作为employees表的主键的列,以反映员工之间的汇报结构,即每个员工向另一个员工汇报,员工可以有零个或多个直接汇报。我们有一个关于自联接教程可以帮助您根据这种表查询数据。

reportTo外键也被称为递归或自引用的外键。

外键强制执行引用完整性,可帮助您自动维护数据的一致性和完整性。例如,您无法为不存在的客户创建订单。

此外,您可以customerNumber在外键的删除操作上设置级联,以便在删除customers表中的客户时,也会删除与客户关联的所有订单。这节省了使用多个DELETE语句 或DELETE JOIN语句的时间和精力。

与删除相同,您还可以在更新操作上为customerNumber外键定义级联,以便在不使用多个UPDATE语句或UPDATE JOIN语句的情况下执行跨表更新。

注意:在MySQL中,InnoDB 存储引擎支持外键,因此您必须创建InnoDB表才能使用外键约束。

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

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

  • 必须为主表定义主键。

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

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

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

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

为表创建外键

MySQL创建外键语法

以下语法说明如何在CREATE TABLE语句中的子表中定义外键。

CONSTRaiNT constraint_name
FOREIGN KEY foreign_key_name (columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action

让我们更详细地学习一下语法:

  • CONSTRAINT子句允许您为外键约束定义约束名称。如果省略它,MySQL将自动生成一个名称。

  • FOREIGN KEY子句指定子表中引用父表中主键列的列。你可以把一个外键名称放在FOREIGN KEY子句之后,或者让MySQL为你创建一个名字。请注意,MySQL会自动使用foreign_key_name名称创建索引

  • REFERENCES子句指定子表中的列所引用的父表及列。在规定的子表和父表的列数FOREIGN KEY和REFERENCES必须相同。

  • ON DELETE子句允许您定义删除父表中的记录时子表中记录的内容。如果省略ON DELETE子句并删除父表中包含子表中记录的记录,MySQL将拒绝删除。此外,MySQL还为您提供操作,以便您可以使用其他选项,例如ON DELETE CASCADE  ,要求MySQL删除子表中的记录,当父表中的记录被删除时,记录将引用父表中的记录。如果您不希望删除子表中的相关记录,请改用ON DELETE SET NULL操作。MySQL会将子表中的外键列值设置为NULL删除父表中的记录时,条件是子表中的外键列必须接受NULL值。请注意,如果您使用ON DELETE NO ACTION或ON DELETE RESTRICT操作,MySQL将拒绝删除。

  • ON UPDATE子句使您可以指定更新父表中的行时子表中的行会发生什么。您可以省略ON UPDATE子句,以便在更新父表中的行时让MySQL拒绝对子表中行的任何更新。ON UPDATE CASCADE操作允许您执行跨表更新,并且当更新父表ON UPDATE SET NULL中的行时,操作会将子表中的行中的值重置为值NULL。ON UPDATE NO ACTION或UPDATE RESTRICT行动拒绝任何更新。

MySQL创建表外键示例

下面的示例创建一个dbdemo数据库和两个表:cateGories和  products.每个类别具有一个或多个产品和每个产品只属于一个类别。products表中的cat_id字段被定义为带有UPDATE ON CASCADE和DELETE ON RESTRICT操作的外键。

CREATE DATABASE IF NOT EXISTS dbdemo;
 
USE dbdemo;
 
CREATE TABLE categories(
   cat_id int not null auto_increment primary key,
   cat_name varchar(255) not null,
   cat_description text
) ENGINE=InnoDB;
 
CREATE TABLE products(
   prd_id int not null auto_increment primary key,
   prd_name varchar(355) not null,
   prd_price decimal,
   cat_id int not null,
   FOREIGN KEY fk_cat(cat_id)
   REFERENCES categories(cat_id)
   ON UPDATE CASCADE
   ON DELETE RESTRICT
)ENGINE=InnoDB;

将外键添加到表中

MySQL添加外键语法

要将外键添加到现有表,请使用带有上述外键定义语法的ALTER TABLE语句:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)
ON DELETE action
ON UPDATE action;

MySQL添加外键示例

现在,让我们添加一个名为vendors的新表,并更改products表以包含供应商ID字段:

USE dbdemo;
 
CREATE TABLE vendors(
    vdr_id int not null auto_increment primary key,
    vdr_name varchar(255)
)ENGINE=InnoDB;
 
ALTER TABLE products 
ADD COLUMN vdr_id int not null AFTER cat_id;

要向表中添加外键products,请使用以下语句:

ALTER TABLE products
ADD FOREIGN KEY fk_vendor(vdr_id)
REFERENCES vendors(vdr_id)
ON DELETE NO ACTION
ON UPDATE CASCADE;

mysql支持外键吗

现在,products表有两个外键,一个引用categories表,另一个引用vendors表。

到此,相信大家对“mysql支持外键吗”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: mysql支持外键吗

本文链接: https://www.lsjlt.com/news/73741.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql支持外键吗
    本篇内容主要讲解“mysql支持外键吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql支持外键吗”吧! mysql支持外键。...
    99+
    2024-04-02
  • PHP支持MySQL吗
    这篇文章主要讲解了“PHP支持MySQL吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP支持MySQL吗”吧!PHP支持MySQL;MySQL是与PHP搭配使用最多的数据库,它们常被称...
    99+
    2023-07-02
  • mysql支持分区吗
    这篇文章主要介绍“mysql支持分区吗”,在日常操作中,相信很多人在mysql支持分区吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql支持分区吗”的疑惑有所帮助!接...
    99+
    2024-04-02
  • mysql支持子查询吗
    这篇文章主要介绍了mysql支持子查询吗的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql支持子查询吗文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • 阿里云支持海外服务器吗?
    随着全球化的推进,越来越多的企业开始考虑将业务拓展到海外。而云服务作为现代企业的基础设施,自然也成为了企业拓展海外业务的重要组成部分。然而,对于许多企业来说,选择海外云服务时,最关心的问题之一就是阿里云是否支持海外服务器。那么,阿里云是否支...
    99+
    2023-10-30
    阿里 海外 服务器
  • Mysql直接支持序运算吗
    本篇内容主要讲解“Mysql直接支持序运算吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql直接支持序运算吗”吧!MySQL 不直接支持序运算 ,写这些...
    99+
    2024-04-02
  • 如何设置mysql支持外网链接
    在mysql中设置允许外网链接的方法:1.启动mysql;2.登录mysql数据库;3.进入数据表;4.执行命令开启外网访问权限;5.更新数据库;6.打开my.ini配置文件;7.修改my.ini配置文件;8.重启mysql;具体步骤如下:...
    99+
    2024-04-02
  • safari支持html5吗
    本教程操作环境:Windows10系统、HTML5版、DELL G3电脑safari支持html5吗?safari默认是支持html5的。如果你是用户,直接就可以访问html5标准制作的页面,如果是开发者,那么直接就可以使用html5标签。...
    99+
    2023-05-14
    html5 safari
  • ie9支持css3吗
    本篇内容主要讲解“ie9支持css3吗”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ie9支持css3吗”吧! IE9支持css3;...
    99+
    2024-04-02
  • hbuilder支持es6吗
    这篇文章主要介绍“hbuilder支持es6吗”,在日常操作中,相信很多人在hbuilder支持es6吗问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”hbuilder支持es6吗”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-04
  • thinkpad支持win11吗
    这篇文章主要讲解了“thinkpad支持win11吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“thinkpad支持win11吗”吧!thinkpad支持win11吗:答:在售的Think...
    99+
    2023-07-01
  • golang支持arm吗
    在当今的计算机技术领域,越来越多的科学技术工作者开始寻找开发语言,以满足不同的需求。对于使用ARM处理器的开发者来说,Golang是否支持ARM成为一个重要的问题。在此篇文章中,我们将探讨Golang对ARM处理器支持的情况,以及如何在AR...
    99+
    2023-05-14
  • ie8支持html5吗
    本教程操作环境:Windows10系统、HTML5版、Dell G3电脑。ie8支持html5吗不支持。但是让IE(ie6/ie7/ie8)支持HTML5元素,我们可以在HTML头部添加以下JavaScript,这是一个简单的documen...
    99+
    2023-05-14
    ie8 html5
  • ie8支持es6吗
    这篇“ie8支持es6吗”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ie8支持es6吗”...
    99+
    2024-04-02
  • kangle支持PHP吗
    这篇文章主要讲解了“kangle支持PHP吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“kangle支持PHP吗”吧!kangle支持PHP;kangle是一款跨平台、功能强大、安全稳定、...
    99+
    2023-07-05
  • pycharm支持win7吗
    是的,pycharm 支持 windows 7。该 ide 可适用于 windows 10、windows 8.1 和 windows 7 等多种操作系统。 PyCharm 是否支持 ...
    99+
    2024-04-25
    linux python macos pycharm
  • ie6支持jquery吗
    今天小编给大家分享一下ie6支持jquery吗的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2024-04-02
  • es6支持import吗
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。当模块化的概念越来越重要的时候,在es6中,引入了模块的语法:import ,下面我们简单了解一下,import是怎么使用的。1、export一个js文件...
    99+
    2023-05-14
    ES6 import
  • ie支持css3吗
    CSS3 是一个强大的最新版本的 CSS,它引入了许多新的特性和功能,可以用来创建更好的用户界面和交互性,但是 CSS3 对于不同浏览器兼容性的问题一直是一个令人头疼的问题。在其中一个最受争议的浏览器 - Internet Explorer...
    99+
    2023-05-14
  • nodejs支持es6吗
    本文小编为大家详细介绍“nodejs支持es6吗”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs支持es6吗”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。nodejs支持es6。Node.js是针对现...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作