前言:之前已经针对数据库的单表查询进行了详细的介绍:MySQL之增删改查,然而实际开发中业务逻辑较为复杂,需要对多张表进行操作,现在对多表操作进行介绍。
前提:为方便后面的操作,我们首先创建一个数据库 test,再在 test 里创建两个数据表:grade(班级表)和student(学生表)
创建数据库:CREATE DATABASE test;
选择要操作的数据表:USE test;
创建数据表:CREATE TABLE grade
(
id INT(4) NOT NULL PRIMARY KEY,
name varchar(36)
);
CREATE TABLE student
(
sid INT(4) NOT NULL PRIMARY KEY,
sname VARCHAR(36),
gid INT(4) NOT NULL
);
1、外键
定义:外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束,外键用于建立和加强两个表数据之间的连接。在已经建立的grade表和student表中,student表中的gid就是grade表中的id,那么gid就可以作为student表的外键。其中,被引用的表grade就是主表,引用外键的表,即student表就是从表,两个表示主从关系。
1.1 为表添加外键约束
语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 外表表名(主键字段名);
举例:为student表添加外键约束
命令:ALTER TABLE student ADD CONSTRAINT FK_ID FOREIGN KEY (gid) REFERENCES grade(id);
注意:定义外键名时不能加引号。
使用SHOW CREATE ABLE student命令查看student表:
结果:
说明名为“FK_ID”的外键已经成功添加。
注意:如果未出现此结果,需要先将 grade 表和 student 的 engine 改为 InnoDB ,命令为:ALTER TABLE grade ENGINE=InnoDB;ALTER TABLE student ENGINE=InnoDB;
1.2 删除外键约束
语法:ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
举例:删除student表中的外键约束
命令:ALTER TABLE student DROP FOREIGN KEY FK_ID;
执行删除外键命令之后再使用 SHOW CREATE TABLE student;查看:
出现此结果说明外键已被成功删除。
2、操作关联表
2.1 关联关系
(1)多对一
数据表中最常见的一种关系,比如学生与班级的关系,一个班级可以有多个学生,但是一个学生不能属于多个班级。在多对一的关系中,应该将外键建在多的一方。
(2)多对多
比如学生与课程的关系,一个学生可以选择多门课程,一门课程也供多个学生选择
(2)一对一
比如一个人只有一张身份证,而一张身份证也只对应一个人。
2.2 添加数据
在表grade和表student中添加约束来建立两个表的关联关系:
ALTER TABLE student ADD CONSTRAINT FK_ID FOREIGN KEY(gid) REFERENCES grade (id);
先为主表