外键约束 外键约束 外键约束 举例

(1)基本介绍

外键作用: 使两张表形成关联,外键只能引用外表中的指定列的值!

建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表的主键)。

指定外键关键字: foreign key(列名)

引用外键关键字: references <外键表名>(外键列名)

事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

例如:

outTable表 主键 id 类型 int

创建含有外键的表:

create table temp(

id int,

name char(20),

foreign key(id) references outTable(id) on delete cascade on update cascade);

说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除当外键的值改变本表中对应的列值改变。

(2)定义数据表

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

Pc表

在 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,

... 字段定义 ...

};

(3)设置索引

若要设置外键,在参照表 (referencing table,即pc表) 和被参照表 (referenced table,即parts表) 中,相对应的两个字段必须都设置索引 (index),也可以设置为候选键(key),因为在很多情况下索引(index)和候选键(key)的功能等同。

对parts表:

Alter TABLE parts ADD INDEX idx_model (model);

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

对pc表也类似:

Alter TABLE pc ADD INDEX idx_cpumodel (cpumodel);

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

(4)定义外键

下面为两张表之间建立前面所述的那种“约束”。因为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 出来。

(5)级联操作

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

考虑以下这种情况:

技术人员发现,一个月之前输入到 parts 表中的某个系列的 cpu (可能有[www.niubb.com]很多款)的型号全都输错了一个字母,现在需要改正。我们希望的是,当 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(子表相应字段设置为空)等操作

  

爱华网本文地址 » http://www.aihuau.com/a/390451/796960288028.html

更多阅读

Excel快捷键大全 excel快捷键和功能键

简介Excel作为办公软件中常用软件,其快捷键也颇多,下面我将其快捷键介绍给大家。快捷键【Ctrl】+【(】??????? 取消隐藏选定范围内所有隐藏的行。【Ctrl】+【)】??????? 取消隐藏选定范围内所有隐藏的列。【Ctrl】+【&amp;】????

花键轴在铣床上怎么加工? 花键轴加工

Re: 花键轴在铣床上怎么加工?请教用锯片花键铣刀,分度头-顶针夹紧,卧铣就行机械设计,机械加工,设计软件,机械工程师,设备管理,焊接,液压,铸造,密封,测量,工程机械,粉末冶金,轴承,齿轮,泵阀,工业自动化用花键滚(分内定心(还得用花键

声明:《外键约束 外键约束 外键约束 举例》为网友卟荏輸分享!如侵犯到您的合法权益请联系我们删除