mysql怎么用外键关联
时间 : 2023-03-10 22:20:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

MySQL 中外键(Foreign Key)用于建立表与表之间的关联。它定义了两张表之间的联系和依赖关系,使得这些表能够更好地协同工作。在 MySQL 中,我们可以使用外键关联两张表,其中一个表作为主表,另一个作为从表。

在 MySQL 中使用外键,需要在创建从表时,定义对应主表列的外键约束。例如,假设我们有一个主表 User,用于存储用户的基本信息,同时有一个从表 Order,用于存储用户下的订单信息。则使用外键即可将这两张表关联起来。

下面,我们以一个具体的例子来展示如何使用外键关联 MySQL 中的两张表。

#### 1. 创建主表

首先,我们需要创建一个包含用户基本信息的主表 User,用于存储用户的ID、姓名和性别等信息。

```mysql

CREATE TABLE `User` (

`UserID` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',

`UserName` varchar(20) NOT NULL COMMENT '用户名',

`Gender` varchar(2) NOT NULL COMMENT '性别',

PRIMARY KEY (`UserID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

#### 2. 创建从表

接下来,我们需要创建一个从表 Order,用于存储用户下的订单信息。在创建从表时,我们需要在对应主表列上定义外键约束,例如,在这个例子中,我们将 Order 表中的 UserID 列定义为外键约束,指向主表 User 中的 UserID 列。

```mysql

CREATE TABLE `Order` (

`OrderID` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单ID',

`OrderName` varchar(20) NOT NULL COMMENT '订单名',

`UserID` int(11) NOT NULL COMMENT '用户ID',

PRIMARY KEY (`OrderID`),

KEY `FK_UserID` (`UserID`),

CONSTRAINT `FK_UserID` FOREIGN KEY (`UserID`) REFERENCES `User` (`UserID`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';

在上面的 CREATE TABLE 命令中,我们定义了一条名为 `FK_UserID` 的索引,用于提高查询效率。同时,我们还在 CONSTRAINT 子句中定义了外键约束,指定了该列作为主表 User 的 UserID 列的引用,同时指定了删除和更新约束条件。

#### 3. 插入数据

现在,我们已经创建了两张表,并在 Order 表的 UserID 列上定义了外键约束。接下来,我们需要在这两张表中插入数据来测试外键关联是否成功。

```mysql

INSERT INTO `User` (`UserName`,`Gender`) values ('Tom','M');

INSERT INTO `Order` (`OrderName`,`UserID`) values ('Order1',1);

执行上述命令后,我们在 User 表中插入了一条关于 Tom 用户的数据,在 Order 表中插入了一条订单数据,其中的 UserID 列与 User 表中的 UserID 列相关联。

#### 4. 查询数据

最后,我们可以通过联合查询 User 和 Order 表来查看 User 与 Order 的关联关系。

```mysql

SELECT a.UserName, a.Gender, b.OrderName

FROM User a

INNER JOIN `Order` b on a.UserID=b.UserID;

执行上述命令后,可以看到输出结果为:

+----------+--------+-----------+

| UserName | Gender | OrderName |

+----------+--------+-----------+

| Tom | M | Order1 |

+----------+--------+-----------+

1 row in set (0.00 sec)

通过以上步骤,我们已经成功地使用外键实现了两张表的关联。外键的使用可以加强表与表之间的关联和约束,保证数据的安全和完整性。

在MySQL中,使用外键可以将两个表之间的关系建立起来。外键可以帮助保持数据的一致性,确保在一个表中的记录仅与另一个表中已存在的记录相关联。

要在MySQL中使用外键,必须满足以下条件:

1. MySQL版本必须为5.1.10或更高版本。

2. 使用的存储引擎必须支持外键。InnoDB是MySQL的一种存储引擎,它支持外键。

3. 列被定义为外键列必须具有相同的数据类型。

下面是使用外键在MySQL中关联两个表的步骤:

1.首先,创建第一个表,并在表中定义一个外键列。例如,我们可以创建一个名为Person的表,并在该表中定义一个名为phone_id的外键列,该列将在后面用于关联到另一个表。

CREATE TABLE Person (

id INT(11) NOT NULL AUTO_INCREMENT,

name VARCHAR(50) NOT NULL,

phone_id INT(11) NOT NULL,

PRIMARY KEY (id),

FOREIGN KEY (phone_id) REFERENCES Phone(id)

) ENGINE=InnoDB;

这里我们定义了一个外键`phone_id`并将其关联到`Phone`表中的`id`列。

2.接下来,创建第二个表。在这个例子中,我们称之为Phone表:

CREATE TABLE Phone (

id INT(11) NOT NULL AUTO_INCREMENT,

phone_number VARCHAR(20) NOT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB;

在这个例子中,我们只定义了一个id列和一个phone_number列。

3.现在,将Phone表中的数据插入到数据库中:

INSERT INTO Phone (phone_number) VALUES ("123-456-7890"),("555-123-4567");

现在,我们可以使用刚刚创建的Person表中的外键列将两个表关联起来:

INSERT INTO Person (name, phone_id) VALUES ("John Doe", 1);

在这个例子中,我们将Person表中的“John Doe”与Phone表中的“123-456-7890”关联起来。

4.最后,我们可以通过使用INNER JOIN语句将两个表连接起来:

SELECT Person.name, Phone.phone_number

FROM Person

INNER JOIN Phone ON Person.phone_id = Phone.id;

这将返回一个结果集,其中包含Person表和Phone表中的数据,这两个表的关系是由外键约束实现的。

总之,使用外键可以帮助我们建立两个表之间的关系,并确保数据的一致性。在MySQL中,使用外键的步骤包括创建表时定义外键列、将数据插入表中、使用外键列关联到另一个表中、以及使用INNER JOIN语句将两个表连接起来。