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)

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

相关推荐
冬奇Lab8 小时前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
小猿姐10 小时前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
ClouGence18 小时前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
云技纵横20 小时前
Gap Lock 死锁实战:5 秒在本地复现 MySQL 间隙锁死锁
后端·mysql
无响应de神21 小时前
三、用户与权限管理
数据库·mysql
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
麦聪聊数据2 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
ApacheSeaTunnel2 天前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化