MySQL 表关系建立

什么是表关系

在MySQL数据库中,表关系是指两个或多个表之间的关联关系。通过建立表关系,我们可以实现数据的一对一、一对多、多对多等复杂关系,并以此来实现数据的查询、插入、更新和删除等操作。

表关系可以通过主键和外键来建立,主键是唯一标识每个表记录的字段,而外键是表之间的联系字段。通过主键和外键的关联,我们可以建立表之间的关系。

表关系的类型

在MySQL中,常见的表关系类型有以下几种:

  1. 一对一关系(One-to-One):一个表的记录对应另一个表的一个记录。例如,一个学生只有一个身份证号码,一个身份证号码也只属于一个学生。

  2. 一对多关系(One-to-Many):一个表的记录对应另一个表的多个记录。例如,一个部门可以有多个员工,但一个员工只属于一个部门。

  3. 多对一关系(Many-to-One):多个表的记录对应另一个表的一个记录。例如,多个订单可以属于同一个客户。

  4. 多对多关系(Many-to-Many):多个表的记录对应另一个表的多个记录。例如,一个学生可以选择多门课程,一门课程也可以有多个学生选择。

建立表关系的方法

一对一关系

在MySQL中,建立一对一关系可以通过在两个表中分别添加主键和外键来实现。以下是一个示例:

-- 创建学生表
CREATE TABLE students (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 创建身份证表
CREATE TABLE id_cards (
  id INT PRIMARY KEY,
  card_number VARCHAR(20),
  student_id INT,
  FOREIGN KEY (student_id) REFERENCES students(id)
);

在上面的示例中,students表和id_cards表之间建立了一对一关系。students表的id字段作为主键,id_cards表的student_id字段作为外键,参照students表的主键。

一对多关系

建立一对多关系的方法与一对一关系类似,只需要在多的一方的表中添加外键,指向一的一方的表的主键。以下是一个示例:

-- 创建部门表
CREATE TABLE departments (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 创建员工表
CREATE TABLE employees (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  department_id INT,
  FOREIGN KEY (department_id) REFERENCES departments(id)
);

在上面的示例中,departments表和employees表之间建立了一对多关系。departments表的id字段作为主键,employees表的department_id字段作为外键,参照departments表的主键。

多对一关系

多对一关系与一对多关系正好相反,只需要在一的一方的表中添加外键,指向多的一方的表的主键。以下是一个示例:

-- 创建客户表
CREATE TABLE customers (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 创建订单表
CREATE TABLE orders (
  id INT PRIMARY KEY,
  customer_id INT,
  order_number VARCHAR(20),
  FOREIGN KEY (customer_id) REFERENCES customers(id)
);

在上面的示例中,customers表和orders表之间建立了多对一关系。orders表的customer_id字段作为外键,参照customers表的主键。

多对多关系

多对多关系需要通过中间表来建立。以下是一个示例:

-- 创建学生表
CREATE TABLE students (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 创建课程表
CREATE TABLE courses (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 创建选课表
CREATE TABLE course_selections (
  student_id INT,
  course_id INT,
  PRIMARY KEY (student_id, course_id),
  FOREIGN KEY (student_id) REFERENCES students(id),
  FOREIGN KEY (course_id) REFERENCES courses(id)
);

在上面的示例