mysql外键的三种关系实例详解
时间:2020-01-03来源:系统城作者:电脑系统城
本文实例讲述了mysql外键的三种关系。分享给大家供大家参考,具体如下:
因为有foreign key的约束,使得两张表形成了三种了关系:
一对多或多对一
多对一
- 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)
-
多对多,引入第三张表
多对多
- # 创建被关联表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;
-
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》
希望本文所述对大家MySQL数据库计有所帮助。
相关信息
-
MySQL的核心查询语句详解
一、单表查询
1、排序
2、聚合函数
3、分组
4、limit
二、SQL约束
1、主键约束
2、非空约束
3、唯一约束
4、外键约束
5、默认值
三、多表查询
1、内连接
1)隐式内连接:
2)显式内连接:
2、外连接
1)左外连接
2)右外连接
四...
2023-10-30
-
Mysql中如何删除表重复数据
Mysql删除表重复数据
表里存在唯一主键
没有主键时删除重复数据
Mysql删除表中重复数据并保留一条
准备一张表 用的是mysql8 大家自行更改
创建表并添加四条相同的数据...
2023-10-30