您当前的位置: 首页 > 数据库教程 > MySQL教程 > 数据库之MySQL中如何定义外键

数据库之MySQL中如何定义外键

作者:guanchaofeng 来源:不详 发布时间: 2009-09-30 08:38 点击:
定义数据表 假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做Pc;用来保存配件供货信息的表叫做Parts。 在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号; 在Parts表中相应有一个字段,描述的正是CPU的型号

数据库之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被CREATE出来。
  
  级联操作
  
  考虑以下这种情况:
  
  技术人员发现,一个月之前输入到parts表中的某个系列的cpu(可能有很多款)的型号全都输错了一个字母,现在需要改正。我们希望的是,当parts表中那些ReferencedColumn有所变化时,相应表中的ReferencingColumn也能自动更正。
  
  可以在定义外键的时候,在最后加入这样的关键字:
  
  ONUPDATECASCADE;即在主表更新时,子表(们)产生连锁更新动作,似乎有些人喜欢把这个叫“级联”操作。:)
  
  如果把这语句完整的写出来,就是:
  
  ALTERTABLEpcADDCONSTRAINTfk_cpu_modelFOREIGNKEY(cpumodel)REFERENCESparts(model)ONUPDATECASCADE;
  
  除了CASCADE外,还有RESTRICT(禁止主表变更)、SETNULL(子表相应字段设置为空)等操作。

分享到:
本文"数据库之MySQL中如何定义外键"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4