mysql外键的三种关系_mysql外键的三种关系代码实例解析

news/2024/10/18 9:16:25/

本篇文章小编给大家分享一下mysql外键的三种关系代码实例解析,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

因为有foreign key的约束,使得两张表形成了三种了关系:

多对一

多对多

一对一

一对多或多对一

a587c8c850d80b4b359fdbcdc2059afd.png

多对一

create table press(

id int primary key auto_increment,

name varchar(20)

);

create table book(

id int primary key auto_increment,

name varchar(20),

press_id int not null,

constraint fk_book_press foreign key(press_id) references press(id)

on delete cascade

on update cascade

);

# 先往被关联表中插入记录

insert into press(name) values

('北京工业地雷出版社'),

('人民音乐不好听出版社'),

('知识产权没有用出版社')

;

# 再往关联表中插入记录

insert into book(name,press_id) values

('九阳神功',1),

('九阴真经',2),

('九阴白骨爪',2),

('独孤九剑',3),

('降龙十巴掌',2),

('葵花宝典',3)

;

查询结果:

mysql> select * from book;

+----+-----------------+----------+

| id | name | press_id |

+----+-----------------+----------+

| 1 | 九阳神功 | 1 |

| 2 | 九阴真经 | 2 |

| 3 | 九阴白骨爪 | 2 |

| 4 | 独孤九剑 | 3 |

| 5 | 降龙十巴掌 | 2 |

| 6 | 葵花宝典 | 3 |

+----+-----------------+----------+

rows in set (0.00 sec)

mysql> select * from press;

+----+--------------------------------+

| id | name |

+----+--------------------------------+

| 1 | 北京工业地雷出版社 |

| 2 | 人民音乐不好听出版社 |

| 3 | 知识产权没有用出版社 |

+----+--------------------------------+

rows in set (0.00 sec)

多对多,引入第三张表

d868dffdf1afe15f37839c0d15bcb1f0.png

多对多

# 创建被关联表author表,之前的book表在讲多对一的关系已创建

create table author(

id int primary key auto_increment,

name varchar(20)

);

#这张表就存放了author表和book表的关系,即查询二者的关系查这表就可以了

create table author2book(

id int not null unique auto_increment,

author_id int not null,

book_id int not null,

constraint fk_author foreign key(author_id) references author(id)

on delete cascade

on update cascade,

constraint fk_book foreign key(book_id) references book(id)

on delete cascade

on update cascade,

primary key(author_id,book_id)

);

#插入四个作者,id依次排开

insert into author(name) values('egon'),('alex'),('wusir'),('yuanhao');

# 每个作者的代表作

egon: 九阳神功、九阴真经、九阴白骨爪、独孤九剑、降龙十巴掌、葵花宝典

alex: 九阳神功、葵花宝典

wusir:独孤九剑、降龙十巴掌、葵花宝典

yuanhao:九阳神功

# 在author2book表中插入相应的数据

insert into author2book(author_id,book_id) values

(1,1),

(1,2),

(1,3),

(1,4),

(1,5),

(1,6),

(2,1),

(2,6),

(3,4),

(3,5),

(3,6),

(4,1)

;

# 现在就可以查author2book对应的作者和书的关系了

mysql> select * from author2book;

+----+-----------+---------+

| id | author_id | book_id |

+----+-----------+---------+

| 1 | 1 | 1 |

| 2 | 1 | 2 |

| 3 | 1 | 3 |

| 4 | 1 | 4 |

| 5 | 1 | 5 |

| 6 | 1 | 6 |

| 7 | 2 | 1 |

| 8 | 2 | 6 |

| 9 | 3 | 4 |

| 10 | 3 | 5 |

| 11 | 3 | 6 |

| 12 | 4 | 1 |

+----+-----------+---------+

rows in set (0.00 sec)

一对一的情况

一对一

#例如: 一个用户只能注册一个博客

#两张表: 用户表 (user)和 博客表(blog)

# 创建用户表

create table user(

id int primary key auto_increment,

name varchar(20)

);

# 创建博客表

create table blog(

id int primary key auto_increment,

url varchar(100),

user_id int unique,

constraint fk_user foreign key(user_id) references user(id)

on delete cascade

on update cascade

);

#插入用户表中的记录

insert into user(name) values

('alex'),

('wusir'),

('egon'),

('xiaoma')

;

# 插入博客表的记录

insert into blog(url,user_id) values

('http://www.cnblog/alex',1),

('http://www.cnblog/wusir',2),

('http://www.cnblog/egon',3),

('http://www.cnblog/xiaoma',4)

;

# 查询wusir的博客地址

select url from blog where user_id=2;


http://www.ppmy.cn/news/562994.html

相关文章

一名Android程序员的自我修养

前言 “没有小角色,只有小演员”,这是出自周星驰电影《喜剧之王》中周星驰扮演的尹天仇随身携带的书–《演员的自我修养》。 最近达叔的离世,让我感慨万千。作为在中国土生土长的90后,也算是看着达叔的电影长大的,尤其…

高并发系统设计三十一(流量控制)

上一节里,我们了解了微服务架构中常见的两种有损的服务保护策略:熔断和降级。它们都是通过暂时关闭某些非核心服务或者组件从而保护核心系统的可用性。但是,并不是所有的场景下都可以使用熔断降级的策略,比如,电商系统…

jumpserver【基本使用教程】

目录 目录 【1】管理用户 【2】系统用户 【3】普通用户 【4】添加资产(可以添加的有:服务器、网络设备、数据库应用) 【5】权限划分 【6】验证(使用普通用户登录资产) 【7】查看是否有记录 【8】添加数据库资产…

HarmonyOS学习路之开发篇—AI功能开发(图像超分辨率)

针对图片分辨率不足的问题,传统的解决方案是使用双线性或双三次插值的方法来放大图像;而针对图片压缩噪声的问题,传统的解决方案则是通过各种算法实现平滑、去噪。 本SDK使用智能的方法,基于深度神经网络,依托硬件的神…

TIM/QQ——将群文件中的临时文件转换成永久文件的方法

1、点击“查看群文件” 2、选中“临时文件”,点击“鼠标右键” 3、点击“转存为永久文件”

不登录QQ,恢复QQ聊天中的语音到电脑上,并导出为MP3

之前发过一篇文章,专门讲了如何恢复导出微信的语音到电脑上,并转为MP3,用来方便整理的,本篇文章专门讲如何恢复QQ的语音,并导出到电脑上,保存为MP3。 QQ和微信一样,聊天记录中使用的语音使用的…

用Python3对QQ导出的文本聊天记录进行整理。

三个月没看QQ群了。 群里有同学分享的近期答辩注意事项,于是乎想把近期QQ聊天记录从头到尾过一遍。 导出聊天记录文本,发觉上万行的文本,这么读效率有点低,所以用python整理了一下。 这个是整理前的(手机端QQ聊天记…

qq2013 聊天纪录存放路径 及 导入聊天记录

1)我的文档:默认安装方式都选得这个。 里边有个tencent-QQ-然后找到你的QQ号。这就是你的聊天记录。 2)如果你选了其他安装方式 如果不在C盘。那么就是自己设定的路径。 3)导入聊天记录:QQ到2013最新版QQ&#xff0c…