MySQL中如何定义外键

来源:asp之家 时间:2010-03-09 16:18:00 

假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做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出来。

标签:MySQL,定义,外键,MySQL外键
0
投稿

猜你喜欢

  • vue多次循环操作示例

    2024-05-28 15:48:20
  • 详解AJAX核心 —— XMLHttpRequest 对象

    2010-03-31 14:49:00
  • Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】

    2022-01-04 08:14:09
  • Python实现我的世界小游戏源代码

    2023-07-26 02:09:08
  • 详解微信小程序文件下载--视频和图片

    2023-08-10 16:38:50
  • Python地理地图可视化folium标记点弹窗设置代码(推荐)

    2022-08-18 17:02:57
  • Python如何将装饰器定义为类

    2021-10-21 09:27:56
  • IE7 与 IE6 的模式窗口尺寸差异

    2008-03-06 13:49:00
  • ASP.NET MVC4入门教程(八):给数据模型添加校验器

    2024-06-05 09:27:38
  • Python中正则表达式的用法实例汇总

    2021-10-02 07:48:08
  • Python学习之不同数据类型间的转换总结

    2021-10-04 06:06:57
  • Python操作MySQL数据库的示例代码

    2024-01-29 03:55:09
  • Python3读写ini配置文件的示例

    2023-05-29 22:59:21
  • python 判断网络连通的实现方法

    2021-07-28 06:47:29
  • JavaScript修改作用域外变量的方法

    2024-04-10 16:12:01
  • vue项目中的数据变化被watch监听并处理

    2024-04-27 16:11:53
  • 如何修改Editplus让图片自适应界面大小

    2007-09-26 12:37:00
  • Python计算多幅图像栅格值的平均值

    2021-03-28 01:41:05
  • python 读取yaml文件的两种方法(在unittest中使用)

    2021-04-20 17:38:30
  • JS前端组件设计以业务为导向实践思考

    2024-06-21 04:13:33
  • asp之家 网络编程 m.aspxhome.com