如何为MySQL中的关联表添加数据库表和关联子表?

要在MySQL中为关联表添加数据库表_关联子表,首先需要创建两个表,然后在一个表中创建一个外键,将该表与另一个表关联起来。这样,当在一个表中插入或更新数据时,另一个表中的数据也会相应地发生变化。

在MySQL数据库中,关联表是一种常见的需求,它允许将两个或多个表通过特定的字段关联起来,以便于查询和操作相关数据,下面是关联表的创建方法:

mysql为关联表添加数据库表_关联子表
(图片来源网络,侵删)

1、一对一关系表的创建

定义:在一对一关系中,表A中的某项数据只能与表B中的某项数据相关联,反之亦然,这种关系通常用于分割一个大表,以保持数据的清晰和隔离。

实例:假设有一个“用户”表和一个“用户详情”表,每个用户都有唯一的用户详情。

建表语句

“`sql

CREATE TABLEUser (

user_id INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘用户ID’,

mysql为关联表添加数据库表_关联子表
(图片来源网络,侵删)

username VARCHAR(32) NOT NULL UNIQUE COMMENT ‘用户名’,

PRIMARY KEY (user_id)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT=’用户表’;

CREATE TABLEUserDetail (

detail_id INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘详情ID’,

user_id INT(11) NOT NULL COMMENT ‘关联用户ID’,

address VARCHAR(255) DEFAULT NULL COMMENT ‘地址’,

mysql为关联表添加数据库表_关联子表
(图片来源网络,侵删)

PRIMARY KEY (detail_id),

FOREIGN KEY (user_id) REFERENCES User(user_id)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT=’用户详情表’;

“`

2、一对多关系表的创建

定义:一对多关系是指表A中的某项数据可以与表B中的多项数据相关联,但表B中的某项数据只能与表A中的某项数据相关联,这是数据库中最常见的关系类型。

实例:一个“学校”表和一个“班级”表,一个学校可以有多个班级,但每个班级只属于一个学校。

建表语句

“`sql

CREATE TABLESchool (

school_id INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘学校ID’,

school_name VARCHAR(50) NOT NULL UNIQUE COMMENT ‘学校名称’,

PRIMARY KEY (school_id)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT=’学校表’;

CREATE TABLEClass (

class_id INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘班级ID’,

class_name VARCHAR(32) NOT NULL UNIQUE COMMENT ‘班级名称’,

school_id INT(11) NOT NULL COMMENT ‘关联学校ID’,

PRIMARY KEY (class_id),

FOREIGN KEY (school_id) REFERENCES School(school_id)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT=’班级表’;

“`

3、多对多关系表的创建

定义:多对多关系是指表A中的某项数据可以与表B中的多项数据相关联,反之亦然,要实现这种关系,需要引入第三个表作为关联表。

实例:一个“学生”表和一个“课程”表,一个学生可以选多门课程,一门课程也可以被多个学生选修。

建表语句

“`sql

CREATE TABLEStudent (

student_id INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘学生ID’,

student_name VARCHAR(32) NOT NULL UNIQUE COMMENT ‘学生姓名’,

PRIMARY KEY (student_id)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT=’学生表’;

CREATE TABLECourse (

course_id INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘课程ID’,

course_name VARCHAR(50) NOT NULL UNIQUE COMMENT ‘课程名称’,

PRIMARY KEY (course_id)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT=’课程表’;

CREATE TABLEStudentCourse (

student_id INT(11) NOT NULL COMMENT ‘学生ID’,

course_id INT(11) NOT NULL COMMENT ‘课程ID’,

PRIMARY KEY (student_id,course_id),

FOREIGN KEY (student_id) REFERENCES Student(student_id),

FOREIGN KEY (course_id) REFERENCES Course(course_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’学生课程关联表’;

“`

4、关联查询的使用

内连接:返回两张表中满足条件的记录,查询参加特定课程的所有学生:

“`sql

SELECT Student.student_name, Course.course_name

FROM Student INNER JOIN StudentCourse ON Student.student_id = StudentCourse.student_id

INNER JOIN Course ON StudentCourse.course_id = Course.course_id

WHERE Course.course_name = ‘数学’;

“`

左外连接:返回左表中的所有记录以及右表中满足条件的记录,查询所有学生及他们选修的课程(包括未选课的学生):

“`sql

SELECT Student.student_name, Course.course_name

FROM Student LEFT JOIN StudentCourse ON Student.student_id = StudentCourse.student_id

LEFT JOIN Course ON StudentCourse.course_id = Course.course_id;

“`

右外连接:返回右表中的所有记录以及左表中满足条件的记录,查询所有课程及选修这些课程的学生(包括未被选修的课程):

“`sql

SELECT Student.student_name, Course.course_name

FROM Student RIGHT JOIN StudentCourse ON Student.student_id = StudentCourse.student_id

RIGHT JOIN Course ON StudentCourse.course_id = Course.course_id;

“`

5、关联更新的使用

定义:关联更新是通过关联其他表来更新当前表的一种操作,常用于同步变更信息。

实例:订单表中的商品名称需要根据商品表中的商品名称进行更新。

更新语句

“`sql

UPDATE t_order o

INNER JOIN t_product p ON o.product_id = p.id

SET o.product_name = p.product_name;

“`

在实际应用中,根据具体业务需求选择合适的关联方式非常重要,一对一和一对多关系适用于直接的外键关联,而多对多关系则需要额外的关联表来实现,了解并合理运用这些关联查询和更新方法,可以有效地管理和操作数据库中的数据。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/836617.html

(0)
未希的头像未希新媒体运营
上一篇 2024-08-03 15:16
下一篇 2024-08-03 15:20

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入