FOREIGN KEY 是什么意思?以及如何在 MySQL 表中使用它?

1. FOREIGN KEY 的概念

在 MySQL 中,FOREIGN KEY 是用于建立表之间关联的一种机制。它定义了一个列或者一组列,这些列与另一个表中的列相关联,因此可以将数据存储在多个相关的表中。

FOREIGN KEY 通常用于建立父子关系,其中一个表是父表,另一个表是子表。父表中的每一行都可以与子表中的多行相关联,但是子表中的每一行只能与父表中的一行相关联。

2. 如何在 MySQL 表中使用 FOREIGN KEY

使用 FOREIGN KEY 可以在 MySQL 表中建立关系。在建立表的时候,我们需要在列定义中使用关键字 FOREIGN KEY,并且指定父表中的列名。

2.1 创建父表

我们首先需要创建父表,指定列名和数据类型。

 

CREATE TABLE `parent` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(50) NOT NULL,

`age` INT(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在上述代码中,我们创建了一个父表 parent,其中包含三个列 idnameage。其中,id 列用于设置主键,以便用于与子表联接。

2.2 创建子表

接下来我们需要创建与父表相关联的子表。在创建子表时,我们需要使用关键字 FOREIGN KEY 来指定列所涉及的父表中的列名。

 

CREATE TABLE `child` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(50) NOT NULL,

`age` INT(11) NOT NULL,

`parent_id` INT(11) NOT NULL,

PRIMARY KEY (`id`),

CONSTRAINT `fk_child_parent_id`

FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在上述代码中,我们首先定义了与父表联接的列 parent_id。但是,我们还需要使用 约束条件。此处我们使用名称为 fk_child_parent_id 的约束关联子表到父表的 id 列。

2.3 约束条件

在 MySQL 中,约束条件用于对列中的数据进行规定。在 FOREIGN KEY 中,我们需要使用约束条件指定父表中的列。

下面是一些常用的约束条件:

NOT NULL:确保列的值不能为空。

UNIQUE:确保列的值是唯一的。

PRIMARY KEY:用于设置主键。

FOREIGN KEY:用于设置外键。

CHECK:用于检查列中的值是否符合指定条件。

我们在上述代码中使用 FOREIGN KEY 设置了外键。这个外键约束的作用是将子表中的 parent_id 列相关联到父表中的 id 列。在这个示例中,通过FOREIGN KEY 约束条件,我们可以确保此列中的所有值都是父表中主键列。

2.4 进行插入操作

在创建完父表和子表之后,我们可以向两个表中插入数据。在插入数据时,需要将子表中的 parent_id 列与父表中的 id 列相关联,以确保它们是相关的。

 

INSERT INTO `parent` (`name`, `age`) VALUES ('John', 35);

INSERT INTO `child` (`name`, `age`, `parent_id`) VALUES ('Jane', 5, 1);

INSERT INTO `child` (`name`, `age`, `parent_id`) VALUES ('Bob', 6, 1);

在上述代码中,我们先将父表的一行插入到表中,接着将两行插入到子表中。在插入子表的两行数据时,我们使用 parent_id 列与父表中 id 列相关联。

3. 总结

FOREIGN KEY 是 MySQL 中用于建立表之间关联的机制。通过使用 FOREIGN KEY,我们可以建立父子关系,在父子表中存储相关的数据。在使用 FOREIGN KEY 时,我们需要定义父表和子表,并且使用相应的约束条件来定义关联。在插入数据时,我们需要使用子表中的列与父表中的列相关联,以确保它们是相关的。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签