新手入门:如何在MySQL数据库中定义外键_MySQL

生活常识 2023-04-20 11:21生活常识www.wozhengxing.cn
Mysql外键

定义数据表

如果计算机制造商将整机和配件的产品信息保存在其数据库中。用于保存整机产品信息的表称为整机产品信息pc;用于保存零件供应信息的表称为parts。

PC表中有一个字段,用于描述该计算机使用的CPU型号;

Parts表中有一个字段,描述的是CPU的型号,我们可以把它看作是所有CPU的型号列表。

显然,该厂家生产的电脑,其CPU必须是供货信息表(parts)中存在的型号。此时,两个表中存在约束关系。(constraint)——pc表中的CPU型号受到parts表中型号的约束。

,我们将创建parts表

CREATETABLEparts(...字段定义...,modelVARCHAR(20)NOTNULL,...字段定义...);

接下来是PC表

CREATETABLEpc(...字段定义...,cpumodelVARCHAR(20)NOTNULL,...字段定义...};

设置索引

如需设置外键,请在参考表中(referencingtable,即pc表)和参考表(referencedtable,在parts表中,相应的两个字段必须设置索引(index)。

对parts表

ALTERTABLEpartsADDINDEXidx_model(model);

这句话的意思是为parts表添加一个索引,索引是基于model字段,给索引起一个名字叫做idx_model。

PC表也类似:

ALTERTABLEpcADDINDEXidx_cpumodel(cpumodel);

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

定义外键

以下是两张表之间建立的上述“约束”。因为PC的。CPU型号必须参照parts表中的相应型号,我们将pc表的cpumodel字段设置为“外键”(FOREIGNKEY),也就是说,这个键的参考值来自其他表。

ALTERTABLEpcADDCONSTRAINTfk_cpu_modelFOREIGNKEY(cpumodel)REFERENCESparts(model);

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

这样,我们的外键就好了!假如我们试着CREATE一台pc,它使用的CPU型号不存在于Parts表中,所以MySQL将禁止这个PC被Parts表中,CREATE出来。

级联操作

考虑以下情况

技术人员发现,一个月前输入到parts表中的某一系列cpu(可能有很多型号)都输错了字母,现在需要纠正。我们减肥人网希望的是,当parts表中的那些时候,ReferencedColumn当相应表中发生变化时,ReferencingColumn也可以自动更正。

在定义外键时,可以在添加这样的关键字

ONUPDATECASCADE;也就是说,当主表更新时,子表(人)会产生连锁更新动作,似乎有些人喜欢称之为“级联”操作。

如果完整地写出这句话,就是

ALTERTABLEpcADDCONSTRAINTfk_cpu_modelFOREIGNKEY(cpumodel)REFERENCESparts(model)ONUPDATECASCADE;

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

Copyright@2015-2025 www.wozhengxing.cn 我整形网版板所有All right reserved -