All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
SQL,Server,2008,R2官方上市日期出炉_mssql学习_编程技术
讲述c#中的类型转换_[Asp.Net教程]
技巧:.NET中加密与解密QueryString的方法_.net资料_编程技术
入门知识:动态网页PHP编程中数组的基础知识_php资料_编程技术
基础知识之认识和使用,RSS+asp.net_.net资料_编程技术
Asp.net页面输出成HTML页面_[Asp.Net教程]
告别ASP.NET操作EXCEL的烦恼(总结篇)_[Asp.Net教程]
如何使用SQL Server数据库嵌套子查询_[SQL Server教程]
Visual,Studio,2008英文正式版已经发布在MSDN_[Asp.Net教程]
C#2.0基本语法二_[Asp.Net教程]
Reading number is top 10 pictures
Shandong jinan is about to dismantle a one hundred-year history of the building
HongMenYan premiere XinLiangGong clairvoyant outfit PK YiFeiLiu2
Look at the Spring Festival people crowded into the what kind
全身蕾丝丝质美臀
Kim jong il's mistress, national beauty JinYuJi actor2
So beauty, will let you spray blood4
教你做读书笔记
Azusa Yamamoto1
Kim jong il's mistress, national beauty JinYuJi actor1
Sora aoi on twitter4
Download software ranking
Proficient in JavaScript
Tram sex maniac 2 (H) rar bag1
C#与.NET技术平台实战演练
Tram sex maniac 2 (H) rar bag10
SQL2000 For 4IN1
Love the forty days
Ashlynn Video5
C#高级编程(第4版)
实战黑客不求人
Boxer Classic video1
aaa published in(发表于) 2013/12/27 20:03:16 Edit(编辑)
在MySQL中定义外键_php资料_编程技术

在MySQL中定义外键_php资料_编程技术

在MySQL中定义外键_php资料_编程技术-你的首页-uuhomepage.com
和所有开源项目的参考文档一样,MySQL文档中的SQL语法说明让我等初学者看起来头大。这不,今天我花了大半天的工夫,才把在MySQL中设置外键的语法弄明白,所以赶紧写下来,一来加深一下印象,二来万一过两天忘了,自己也好回来查一下。

定义数据表

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

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

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

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

首先我们来创建 parts 表:

CREATE TABLE parts (
... 字段定义 ...,
model VARCHAR(20) NOT NULL,
... 字段定义 ...
);

接下来是 pc 表:

CREATE TABLE pc (
... 字段定义 ...,
cpumodel VARCHAR(20) NOT NULL,
... 字段定义 ...
};

设置索引

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

对parts表:

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

对pc表也类似:

ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);

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

定义外键

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

ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel)
REFERENCES parts(model);

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

这样,我们的外键就搞好了!如果我们试着CREATE一台pc,它所使用的 cpu 的型号是 parts 表中不存在的,那么 MySQL 会禁止这台 PC 被 CREATE 出来。

级联操作

一切看起来都挺好的,不是吗?

考虑以下这种情况:

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

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

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

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

ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel)
REFERENCES parts(model)
ON UPDATE CASCADE;

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





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.