mysql外键的三种关系实例详解
本文实例讲述了mysql外键的三种关系。分享给大家供大家参考,具体如下:
因为有foreignkey的约束,使得两张表形成了三种了关系:
- 多对一
- 多对多
- 一对一
一对多或多对一
多对一
createtablepress( idintprimarykeyauto_increment, namevarchar(20) ); createtablebook( idintprimarykeyauto_increment, namevarchar(20), press_idintnotnull, constraintfk_book_pressforeignkey(press_id)referencespress(id) ondeletecascade onupdatecascade );
#先往被关联表中插入记录
insertintopress(name)values
('北京工业地雷出版社'),
('人民音乐不好听出版社'),
('知识产权没有用出版社')
;
#再往关联表中插入记录
insertintobook(name,press_id)values
('九阳神功',1),
('九阴真经',2),
('九阴白骨爪',2),
('独孤九剑',3),
('降龙十巴掌',2),
('葵花宝典',3)
;
查询结果:
mysql>select*frombook; +----+-----------------+----------+ |id|name|press_id| +----+-----------------+----------+ |1|九阳神功|1| |2|九阴真经|2| |3|九阴白骨爪|2| |4|独孤九剑|3| |5|降龙十巴掌|2| |6|葵花宝典|3| +----+-----------------+----------+ rowsinset(0.00sec) mysql>select*frompress; +----+--------------------------------+ |id|name| +----+--------------------------------+ |1|北京工业地雷出版社| |2|人民音乐不好听出版社| |3|知识产权没有用出版社| +----+--------------------------------+ rowsinset(0.00sec)
多对多,引入第三张表
多对多
#创建被关联表author表,之前的book表在讲多对一的关系已创建
createtableauthor(
idintprimarykeyauto_increment,
namevarchar(20)
);
#这张表就存放了author表和book表的关系,即查询二者的关系查这表就可以了
createtableauthor2book(
idintnotnulluniqueauto_increment,
author_idintnotnull,
book_idintnotnull,
constraintfk_authorforeignkey(author_id)referencesauthor(id)
ondeletecascade
onupdatecascade,
constraintfk_bookforeignkey(book_id)referencesbook(id)
ondeletecascade
onupdatecascade,
primarykey(author_id,book_id)
);
#插入四个作者,id依次排开
insertintoauthor(name)values('egon'),('alex'),('wusir'),('yuanhao');
#每个作者的代表作
egon:九阳神功、九阴真经、九阴白骨爪、独孤九剑、降龙十巴掌、葵花宝典
alex:九阳神功、葵花宝典
wusir:独孤九剑、降龙十巴掌、葵花宝典
yuanhao:九阳神功
#在author2book表中插入相应的数据
insertintoauthor2book(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*fromauthor2book; +----+-----------+---------+ |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| +----+-----------+---------+ rowsinset(0.00sec)
一对一的情况
一对一
#例如:一个用户只能注册一个博客
#两张表:用户表(user)和博客表(blog)
#创建用户表
createtableuser(
idintprimarykeyauto_increment,
namevarchar(20)
);
#创建博客表
createtableblog(
idintprimarykeyauto_increment,
urlvarchar(100),
user_idintunique,
constraintfk_userforeignkey(user_id)referencesuser(id)
ondeletecascade
onupdatecascade
);
#插入用户表中的记录
insertintouser(name)values
('alex'),
('wusir'),
('egon'),
('xiaoma')
;
#插入博客表的记录
insertintoblog(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的博客地址
selecturlfromblogwhereuser_id=2;
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》
希望本文所述对大家MySQL数据库计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。