新手学习MySQL外键所要知道的知识

php中文网
发布: 2016-06-07 16:09:31
原创
1565人浏览过

我们今天是要和大家一起讨论的是新手学习MySQL外键所要知道的知识,我前两天在相关网站看见新手学习MySQL外键所要知道的相关知识的资料,觉得挺好,今天拿就出来供大家分享。 本文详细介绍MySQL外键:数据库新手入门之MySQL中如何定义外键 定义数据表 假如某

我们今天是要和大家一起讨论的是新手学习mysql外键所要知道的知识,我前两天在相关网站看见新手学习mysql外键所要知道的相关知识的资料,觉得挺好,今天拿就出来供大家分享。

本文详细介绍MySQL外键:数据库新手入门之MySQL中如何定义外键

定义数据表

假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。

在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;

在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。

很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。

首先我们来创建 parts 表:

<ol class="dp-xml"><li class="alt"><span><span>CREATE TABLE parts (  </span></span></li><li><span>... 字段定义 ...,  </span></li><li class="alt"><span>model VARCHAR(20) NOT NULL,  </span></li><li><span>... 字段定义 ...  </span></li><li class="alt"><span>);  </span></li><li><span>接下来是Pc表:  </span></li><li class="alt"><span>CREATE TABLE pc (  </span></li><li><span>... 字段定义 ...,  </span></li><li class="alt"><span>cpumodel VARCHAR(20) NOT NULL,  </span></li><li><span>... 字段定义 ...  </span></li><li class="alt"><span>};  </span></li></ol>
登录后复制

设置索引

若要设置MySQL外键,在参照表(referencing table,即Pc表) 和被参照表 (referenced table,即parts表) 中,相对应的两个字段必须都设置索引(index)。

对Parts表:

<ol class="dp-xml"><li class="alt"><span><span>ALTER TABLE parts ADD INDEX idx_model (model); </span></span></li></ol>
登录后复制

这句话的意思是,为 parts 表增加一个索引,索引建立在 model 字段上,给这个索引起个名字叫idx_model。

对Pc表也类似:

<ol class="dp-xml"><li class="alt"><span><span>ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel); </span></span></li></ol>
登录后复制

事实上这两个索引可以在创建表的时候就设置。这里只是为了突出其必要性。

定义外键

下面为两张表之间建立前面所述的那种“约束”。因为pc的CPU型号必须参照parts表中的相应型号,所以我们将Pc表的cpumodel字段设置为“外键”(FOREIGN KEY),即这个键的参照值来自于其他表。

高级Bash脚本编程指南 chm版
高级Bash脚本编程指南 chm版

这本书假定你没有任何关于脚本或一般程序的编程知识, 但是如果你具备相关的知识, 那么你将很容易就能够达到中高级的水平. . . 所有这些只是UNIX®浩瀚知识的一小部分. 你可以把本书作为教材, 自学手册, 或者是关于shell脚本技术的文档. 书中的练习和样例脚本中的注释将会与读者进行更好的互动, 但是最关键的前提是: 想真正学习脚本编程的唯一途径就是亲自动手编写脚本. 这本书也可作为教材来讲解一般的编程概念. 向伟大的中华民族的Linux用户致意! 我希望这本书能够帮助你们学习和理解L

高级Bash脚本编程指南 chm版 20
查看详情 高级Bash脚本编程指南 chm版
<ol class="dp-xml"><li class="alt"><span><span>ALTER TABLE pc ADD CONSTRAINT fk_cpu_model  </span></span></li><li><span>FOREIGN KEY (cpumodel)  </span></li><li class="alt"><span>REFERENCES parts(model); </span></li></ol>
登录后复制

第一行是说要为Pc表设置MySQL外键,给这个外键起一个名字叫做fk_cpu_model;第二行是说将本表的cpumodel字段设置为外键;第三行是说这个外键受到的约束来自于Parts表的model字段。

这样,我们的外键就可以了。如果我们试着CREATE一台Pc,它所使用的CPU的型号是Parts表中不存在的,那么MySQL会禁止这台PC被CREATE出来。

级联操作

考虑以下这种情况:

技术人员发现,一个月之前输入到 parts 表中的某个系列的 cpu (可能有很多款)的型号全都输错了一个字母,现在需要改正。我们希望的是,当 parts 表中那些 Referenced Column 有所变化时,相应表中的 Referencing Column 也能自动更正。

可以在定义MySQL外键的时候,在最后加入这样的关键字:

ON UPDATE CASCADE; 即在主表更新时,子表(们)产生连锁更新动作,似乎有些人喜欢把这个叫“级联”操作。:)

如果把这语句完整的写出来,就是:

<ol class="dp-xml"><li class="alt"><span><span>ALTER TABLE pc ADD CONSTRAINT fk_cpu_model  </span></span></li><li><span>FOREIGN KEY (cpumodel)  </span></li><li class="alt"><span>REFERENCES parts(model)  </span></li><li><span>ON UPDATE CASCADE; </span></li></ol>
登录后复制

除了 CASCADE 外,还有 RESTRICT(禁止主表变更)、SET NULL(子表相应字段设置为空)等操作。

延伸阅读

外键(Foreign Key)

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

外键的作用:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!


相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号