在 MySQL 中,存储多对多关系数据可以使用中间表的方式实现。中间表(也称为联结表、关联表或交叉表)是一种专门用于存储两个表之间多对多关系的表格。

假设有两个表 AB,它们之间存在多对多关系,即一个 A 可以对应多个 B,一个 B 也可以对应多个 A。为了存储这种多对多关系,需要创建一个中间表 AB,它的结构如下:

AB 表:


id INT PRIMARY KEY,
a_id INT,
b_id INT,
FOREIGN KEY (a_id) REFERENCES A(id),
FOREIGN KEY (b_id) REFERENCES B(id)

在中间表 `AB` 中,`id` 字段为主键,`a_id` 和 `b_id` 字段分别为关联表 `A` 和 `B` 的 `id`。使用 `FOREIGN KEY` 约束来确保中间表中的 `a_id` 和 `b_id` 字段只能引用 `A` 和 `B` 表中存在的记录。

当需要添加一个 `A` 和一个 `B` 的关系时,只需要向中间表 `AB` 中插入一条记录,记录的 `a_id` 和 `b_id` 字段分别为 `A` 和 `B` 的 `id`。例如,要将 `A` 表中 `id` 为 1 的记录与 `B` 表中 `id` 为 2 的记录建立关系,可以执行以下 SQL 语句:

```java
INSERT INTO AB (a_id, b_id) VALUES (1, 2);

当需要查询一个 A 对应的所有 B 时,可以使用以下 SQL 语句:


SELECT B.*
FROM A
JOIN AB ON A.id = AB.a_id
JOIN B ON AB.b_id = B.id
WHERE A.id = 1;

在这个 SQL 语句中,使用 JOIN 操作连接 A 表、中间表 ABB 表,查询 A 表中 id 为 1 的记录对应的所有 B 记录。

同样地,当需要查询一个 B 对应的所有 A 时,可以使用以下 SQL 语句:


SELECT A.*
FROM B
JOIN AB ON B.id = AB.b_id
JOIN A ON AB.a_id = A.id
WHERE B.id = 2;

在这个 SQL 语句中,使用 JOIN 操作连接 B 表、中间表 ABA 表,查询 B 表中 id 为 2 的记录对应的所有 A 记录。

使用中间表的方式,可以方便地存储和查询多对多关系数据。

表a和表b有多对多的关系,怎么管理