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数据库计有所帮助。
相关信息
-
order by + limit分页时数据重复问题及解决方法
问题描述:MYSQL version 5.6.8command 表结构 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 CREATE TABLE
command
(
ID INT NOT NULL,
NAME VARCHAR(16),
D...
2023-03-19
-