热点
机器学习引领微服务网关,物联移动融合新纪元,reasoning_content:我们要求以微服务网关开发工程师的口吻,写一个关于机器学习引领:物联网与移动互联融合新纪元的标题需要简短精炼,30字以内,直接输出标题,不要加说明nn考虑使用工程师的口吻,可能用一些技术术语,比如网关、路由、边缘、智能等主题是机器学习引领物联网与移动互联融合可以设计为:机器学习赋能的微服务网关:物联移动融合新纪元但需要精简nn可能的机器学习驱动网关,物联移动融合新纪元 但字数?数一下:机器学习驱动网关,物联移动融合新纪元 共16字?实际:机(1)器(2)学(3)习(4)驱(5)动(6)网(7)关(8),(9)物(10)联(11)移(12)动(13)融(14)合(15)新(16)纪(17)元(18) 18字可以nn或者更强调工程师身份:微服务网关+机器学习:开启物联移动融合 但需要检查字数nn我觉得 机器学习引领微服务网关:物联移动融合新纪元 共18字不错nn或者直接:机器学习赋能的网关:物联移动互联新纪元 15字nn注意要求物联网与移动互联融合新纪元,所以物联移动可能不够准确最好用物联网与移动互联但太长可以简写为物联移动互联或物联移动nn考虑用ML代替机器学习?但可能不够口语化标题中用英文ML也行nn最终选一个:机器学习驱动微服务网关,物联移动融合新纪元 共18字nn或者更简洁:ML引领网关:物联移动互联新纪元 13字nn因为是微服务网关开发工程师,所以突出微服务网关更好我选:机器学习赋能的微服务网关:物联移动融合新纪元 字数:机器学习赋能的微服务网关:物联移动融合新纪元 数一下:机(1)器(2)学(3)习(4)赋(5)能(6)的(7)微(8)服(9)务(10)网(11)关(12):(13)物(14)联(15)移(16)动(17)融(18)合(19)新(20)纪(21)元(22) 22字,符合30内nn或者更短:ML赋能微服务网关:物联移动融合新纪元 16字nn为了更专业,采用机器学习全称最终输出:机器学习引领微服务网关,物联移动融合新纪元 19字
15 9 月 2026, 周二

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

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

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

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

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

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

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

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

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

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名称创建索引。
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;

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

到此,相信大家对“mysql支持外键吗”有了更深的了解,不妨来实际操作一番吧!

dawei

【声明】:聊城站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

机器学习引领微服务网关,物联移动融合新纪元,reasoning_content:我们要求以微服务网关开发工程师的口吻,写一个关于机器学习引领:物联网与移动互联融合新纪元的标题需要简短精炼,30字以内,直接输出标题,不要加说明nn考虑使用工程师的口吻,可能用一些技术术语,比如网关、路由、边缘、智能等主题是机器学习引领物联网与移动互联融合可以设计为:机器学习赋能的微服务网关:物联移动融合新纪元但需要精简nn可能的机器学习驱动网关,物联移动融合新纪元 但字数?数一下:机器学习驱动网关,物联移动融合新纪元 共16字?实际:机(1)器(2)学(3)习(4)驱(5)动(6)网(7)关(8),(9)物(10)联(11)移(12)动(13)融(14)合(15)新(16)纪(17)元(18) 18字可以nn或者更强调工程师身份:微服务网关+机器学习:开启物联移动融合 但需要检查字数nn我觉得 机器学习引领微服务网关:物联移动融合新纪元 共18字不错nn或者直接:机器学习赋能的网关:物联移动互联新纪元 15字nn注意要求物联网与移动互联融合新纪元,所以物联移动可能不够准确最好用物联网与移动互联但太长可以简写为物联移动互联或物联移动nn考虑用ML代替机器学习?但可能不够口语化标题中用英文ML也行nn最终选一个:机器学习驱动微服务网关,物联移动融合新纪元 共18字nn或者更简洁:ML引领网关:物联移动互联新纪元 13字nn因为是微服务网关开发工程师,所以突出微服务网关更好我选:机器学习赋能的微服务网关:物联移动融合新纪元 字数:机器学习赋能的微服务网关:物联移动融合新纪元 数一下:机(1)器(2)学(3)习(4)赋(5)能(6)的(7)微(8)服(9)务(10)网(11)关(12):(13)物(14)联(15)移(16)动(17)融(18)合(19)新(20)纪(21)元(22) 22字,符合30内nn或者更短:ML赋能微服务网关:物联移动融合新纪元 16字nn为了更专业,采用机器学习全称最终输出:机器学习引领微服务网关,物联移动融合新纪元 19字