MySQL——多表操作(二)操作关联表(2)添加数据

在实际开发中,最常见的关联关系就是多对一关系。接下来,在表 student 和表grade 中添加外键约束来建立两个表的关联关系。具体语句如下:

sql 复制代码
mysql> alter table student add constraint Fk_ID foreign key(gid) REFERENCES grade (id);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

语句执行成功后,查看外键约束是否成功添加,查询结果如下:

sql 复制代码
mysql> show create table student;
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                                 |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
  `sid` int NOT NULL,
  `sname` varchar(36) DEFAULT NULL,
  `gid` int NOT NULL,
  PRIMARY KEY (`sid`),
  KEY `Fk_ID` (`gid`),
  CONSTRAINT `Fk_ID` FOREIGN KEY (`gid`) REFERENCES `grade` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

从查询结果可以看出,student 表的外键约束已经成功添加。此时表 student 和表grade 之间是多对一的关系。因为外键列只能插人参照列存在的值,所以如果要为两个表添加数据,就需要先为主表 grade 添加数据,具体语句如下:

sql 复制代码
mysql> INSERT INTO grade (id,name)VALUES (1,'软件一班');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO grade (id,name)VALUES (2,'软件二班');
Query OK, 1 row affected (0.00 sec)

在上述语句中,添加的主键id为1和2,由于 student 表的外键与 grade 表的主键关联,因此在为 student 表添加数据时,gid 的值只能是1或2,不能使用其他的值,具体语句如下:

sql 复制代码
mysql> INSERT INTO student (sid,sname,gid)VALUES(1,'小明',1);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO student (sid,sname,gid)VALUES(2,'小红',1);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO student (sid,sname,gid)VALUES(3,'小刚',2);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO student (sid,sname,gid)VALUES(4,'小华',2);
Query OK, 1 row affected (0.00 sec)

上述语句执行成功后,两个表之间的数据就具有关联性。假如要查询软件一班有酶些学生,首先需要査询软件一班的id,然后根据这个id 在 student 表中查询该班级有哪酶学生,具体步骤如下。

(1)在 grade表中查询出班级名称为"软件一班"的 id,具有语句如下:

sql 复制代码
SELECT id FRoM grade WHERE name='软件一班';

上述语句执行成功后,结果如下:

sql 复制代码
mysql> SELECT id FRoM grade WHERE name='软件一班';
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

从上述结果可以看出,软件一班的 id 为1。(2)在 student表中,查询 gid-1的学生,即为软件一班的学生,具体语句如下:

sql 复制代码
SELECT sname FROM student WHERE gid=1;

上述语句执行成功后,结果如下:

sql 复制代码
mysql> SELECT sname FROM student WHERE gid=1;
+--------+
| sname  |
+--------+
| 小明   |
| 小红   |
+--------+
2 rows in set (0.00 sec)

从上述结果可以看出,软件一班只有两个学生,一个是小明,一个是小红。

相关推荐
heartbeat..11 分钟前
数据库基础知识体系:概念、约束、范式与国产产品
java·数据库·学习笔记·国产数据库
山峰哥43 分钟前
数据库工程核心:SQL调优让查询效率飙升的实战密码
网络·汇编·数据库·sql·编辑器
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-DDD业务领域模块设计思路
java·数据库·人工智能·spring boot·ddd
小雪_Snow2 小时前
Windows 安装 MySQL 8.0 教程【安装包方式】
数据库·mysql
无敌的牛2 小时前
MySQL初阶
数据库·mysql
不会C++的雾3 小时前
Linux操作系统(2)
linux·数据库·mysql
java_python源码3 小时前
springboot+vue智慧小区管理系统(源码+文档+调试+基础修改+答疑)
数据库·oracle
一个天蝎座 白勺 程序猿3 小时前
KingbaseES存储管理深度解析:控制文件全生命周期管理与重做日志管理
数据库·存储管理·kingbasees·金仓数据库
冉冰学姐4 小时前
SSM学生竞赛模拟系统4x1nt(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·用户管理·ssm 框架·学生竞赛模拟系统
zqmattack4 小时前
SQL优化与索引策略实战指南
java·数据库·sql