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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。