MySQL many-to-many relationships的基本知识和一些常见的实例案例


<!–

–>

MySQL many-to-many relationships的基本知识和一些常见的实例案例

在MySQL中,many-to-many relationships是非常常见的一种关系,在实际开发中也经常用到。本篇文章将会介绍MySQL中many-to-many relationships的基本知识和一些常见的实例案例。

阅读更多:

什么是many-to-many relationships?

many-to-many relationships指的是一个实体(entity)可以和多个另一个实体相对应,同时这个实体也可以和多个其他实体相对应。比如,一个学生可以选多门课程,同时一门课程也可以被多个学生选择,这就是一个典型的many-to-many relationships。

(adsbygoogle = window.adsbygoogle || []).push({});

为了实现many-to-many relationships,需要一个额外的表(junction table),这个表一般只有两个列,这两个列分别是两个表的主键。通过这个额外的表,两个实体之间的多对多的关系就被实现了。

实例展示

以下是一个简单的many-to-many relationships的实例。比如有两个表students和courses,它们的结构如下:

students:
+----+-------+
| id | name  |
+----+-------+
| 1  | Alice |
| 2  | Bob   |
+----+-------+

courses:
+----+--------+
| id | name   |
+----+--------+
| 1  | Math   |
| 2  | English|
| 3  | Physics|
+----+--------+

如果要表示这两个表之间的many-to-many relationships,就需要额外创建一个junction table,命名为student_courses,结构如下:

student_courses:
+----+------------+------------+
| id | student_id | courses_id |
+----+------------+------------+
| 1  | 1          | 1          |
| 2  | 1          | 2          |
| 3  | 2          | 1          |
| 4  | 2          | 3          |
+----+------------+------------+

这个表中的student_id列和courses_id分别是students表和courses表的主键。这个表的id列是可选的,可以作为主键或者可以采用联合主键的形式。

通过这个junction table,就可以很方便地查询每个学生所选修课程的列表,也可以查询每个课程被哪些学生选修了。

比如,如果要查询Alice所选修的所有课程:

(adsbygoogle = window.adsbygoogle || []).push({});

SELECT .name FROM courses  INNER JOIN student_courses sc ON c.id = sc.course_id WHERE sc.student_id = 1;

查询结果如下:

+--------+
| name   |
+--------+
| Math   |
| English|
+--------+

如果要查询选修Math的所有学生:

SELECT s.name FROM students s INNER JOIN student_courses sc ON s.id = sc.student_id WHERE sc.course_id = 1;

查询结果如下:

+-------+
| name  |
+-------+
| Alice |
| Bob   |
+-------+

总结

many-to-many relationships是一种非常常见的关系,通过junction table可以很方便地实现这种关系。在实际开发中,many-to-many relationships经常出现,熟练掌握这种关系的处理方式对于数据库开发人员非常重要。