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)

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

相关推荐
W.Buffer27 分钟前
通用:MySQL-深入理解MySQL中的MVCC:原理、实现与实战价值
数据库·mysql
心态特好1 小时前
详解redis,MySQL,mongodb以及各自使用场景
redis·mysql·mongodb
一只小bit1 小时前
MySQL 库的操作:从创建配置到备份恢复
服务器·数据库·mysql·oracle
sanx182 小时前
专业电竞体育数据与系统解决方案
前端·数据库·apache·数据库开发·时序数据库
养生技术人4 小时前
Oracle OCP认证考试题目详解082系列第57题
运维·数据库·sql·oracle·开闭原则
不良人天码星4 小时前
redis-zset数据类型的常见指令(sorted set)
数据库·redis·缓存
心灵宝贝4 小时前
libopenssl-1_0_0-devel-1.0.2p RPM 包安装教程(openSUSE/SLES x86_64)
linux·服务器·数据库
程序新视界6 小时前
MySQL中,IS NULL和IS NOT NULL不会走索引?错!
数据库·mysql·dba
wdfk_prog7 小时前
闹钟定时器(Alarm Timer)初始化:构建可挂起的定时器基础框架
java·linux·数据库
许长安7 小时前
Redis(二)——Redis协议与异步方式
数据库·redis·junit