mysql一对多关系笔记

嗯。。直接写吧。

还是举个列子,怕将来的自己忘记了。一对多的关系就好比网上举烂了的一个学生属于一个班级的例子,但是反过来一个班级可以有多名学生。

实现这个关系可以在‘多’的那一边添加一个外键约束, 在这个例子中就是在student表中添加外键约束。可以理解成学生想要知道自己属于哪个班级,所以就要关联班级这张表,怎么关联呢?就在student表中创建一个外键。额。。。照这个例子,我自己理解外键就是外部的一个键值,当我一张表太大了, 想分成两张表来写,然后又要保持原来一张表的一个班级有多个学生的关系,就创建了外键。理解不对的话,再改!

用的环境时centos7和mysql5.7

创建一张学生表和一个班级表 , 只是为了做实验弄懂这个关系创建的表。

学生表如下 :

CREATE TABLE `student` (

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `sex` enum('male','female') DEFAULT 'male',
  PRIMARY KEY (`id`)
KEY `student_id` (`student_id`),
  CONSTRAINT `student_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `class` (`id`)
)

班级表如下 :

CREATE TABLE `class` (

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `caption` char(20) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
) 

注:约束(CONSTRAINT)关键字的后面才是外键名。由于我没有指定外键名,mysql帮我生成了一个,上述创建表得sql语句是用show create table 表名贴出来的,然后我把结果稍作了些修改。

创建好了, 我们输入一些数据,如下:

学生表中插入
insert into student(name, student_id) values('钢蛋', 1), ('铁锤', 2), ('山炮', 3), ('胖墩', 4), ('张三', 1);
教室表中插入
insert into class(caption) values('1class'), ('2class'), ('3class'), ('4class');

然后执行查询操作:

mysql> select *  from student, class where student.student_id=class.id;
+----+--------+--------+------------+----+---------+
| id | name   | sex    | student_id | id | caption |
+----+--------+--------+------------+----+---------+
|  1 | 钢弹   | male   |          1 |  1 | 3class  |
|  5 | 张三   | male   |          1 |  1 | 3class  |
|  2 | 铁锤   | male   |          2 |  2 | 4class  |
|  3 | 山炮   | male   |          3 |  3 | 5class  |
|  4 | 胖墩   | female |          4 |  4 | 6class  |
+----+--------+--------+------------+----+---------+
5 rows in set (0.00 sec)

在student表中设置了student_id为外键,此时student.student_id=class.id, 这样当我们查询的时候,就会查询到属于一个班级的学生了。

还琢磨了一对一和多对多的关系,一对一没琢磨出来,多对多的关系再补吧。用到了一些mysql语句,记录一下,虽然随便百度都能一大把

  • 插入语句   insert into 表名(字段名)  value('value1') ......(可以有很多个值);
  • 更新字段的值   update 表名 set 字段名='NEW_VALUE' where  能定位更改字段的条件(例如id=3);
  • 删除外键  alter table 表名 drop foreign key 外键名(本例中的class_ibfk_1);
  •        只删除外键是不能删除这个字段的,要删除这个字段还需要drop掉字段
  • 增加外键  alter table 表名 add foreign key(字段名) references 另一张表的表名(另一张表的唯一键);
  • 增加一个新的字段  alter table 表名 add column 字段名  属性;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值