这篇文章将为大家详细讲解有关mysql外键的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

具体如下:

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

多对一

多对多

一对一

一对多或多对一

多对一

createtablepress(idintprimarykeyauto_increment,namevarchar(20));createtablebook(idintprimarykeyauto_increment,namevarchar(20),press_idintnotnull,constraintfk_book_pressforeignkey(press_id)referencespress(id)ondeletecascadeonupdatecascade);

#先往被关联表中插入记录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)ondeletecascadeonupdatecascade,constraintfk_bookforeignkey(book_id)referencesbook(id)ondeletecascadeonupdatecascade,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)ondeletecascadeonupdatecascade);#插入用户表中的记录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外键的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。