`

mysql添加外键

    博客分类:
  • db
阅读更多

 alter table child add constraint foreign key(id)
 references parent(id);

定义数据表

假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 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(子表相应字段设置为空)等操作。(责任编辑:王瑞)

相关文章:

数据安全之MySQL安全的二十三条军规

技巧 .NET如何访问MySQL数据库

分享到:
评论

相关推荐

    mysql添加外键的四种方式

    以下将详细介绍四种在MySQL中添加外键的方法。 1. **建表时直接使用 FOREIGN KEY** 当创建新表时,可以直接在CREATE TABLE语句中定义外键。这种方法的语法如下: ```sql CREATE TABLE table_name ( column1 ...

    Mysql增加外键的方法

    如果表已经存在且之前没有定义外键,可以使用ALTER TABLE语句来添加外键,如下: ```sql ALTER TABLE 表名 ADD FOREIGN KEY(字段名) REFERENCES 外键表名(外键列名); ``` 在使用ALTER TABLE语句时,如果需要删除...

    mysql外键的添加与删除参考.pdf

    在 MySQL 中,添加外键可以使用ALTER TABLE语句,例如: ``` ALTER TABLE ss_accesscode ADD FOREIGN KEY (vccId) REFERENCES ss_vcc(vccId) ON DELETE CASCADE; ``` 这条语句将在ss_accesscode表中添加一个外键约束...

    MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法

    前言 这篇文章主要涉及到在数据创建表时,遇到ERROR 1215 (HY000): Cannot add foreign key constraint 问题方面的内容,对于在数据创建表时,遇到同样问题感兴趣的同学可以参考一下。 一、问题的提出 ...

    mysql处理添加外键时提示error 150 问题的解决方法

    MySQL 处理添加外键时提示 Error 150 问题的解决方法 MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并...

    mysql的外键

    - 使用`ALTER TABLE`语句可以添加、修改或删除外键约束。 - 删除外键约束时,应先确保没有相关记录,以避免违反参照完整性。 6. **外键的优点** - 保证数据的一致性:外键约束确保了只有有效的主键值才能被引用...

    MySQL外键的定义、作用、添加和删除

    为了保证数据的完整性,将两张表之间的数据建立关系,因此就需要在成绩表中添加外键约束。 外键的定义可以概括为:外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束。外键用来...

    mysql建立外键

    建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键...

    mysql外键设置

    - `yourtablename`:指需要添加外键约束的表名。 - `index_col_name`:指被定义为外键的列名。 - `tbl_name`:指定主表的名称。 - `ON DELETE` 和 `ON UPDATE`:定义当主表的记录被删除或更新时,从表中受影响的记录...

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

    ### 如何在MySQL数据库中定义外键 #### 定义数据表 假设某电脑生产商的数据库中包含了整机产品信息和配件供货信息。为了更好地管理这些信息,我们需要创建两个数据表:`pc` 表用于存储整机产品信息,而 `parts` 表...

    MySql外键设置详解

    二、添加外键的格式 添加外键的格式为: ALTER TABLE yourtablename ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {CASCADE | SET NULL...

    MySQL外键.docx

    在创建完两个表后,需要在“student”表中为`gid`字段添加外键约束,指向“grade”表的`id`字段。 ```sql ALTER TABLE student ADD CONSTRAINT FK_ID FOREIGN KEY (gid) REFERENCES grade (id); ``` 此命令...

    MySQL外键约束常见操作方法示例【查看、添加、修改、删除】

    添加外键约束时,你需要在`ALTER TABLE`语句中指定从表、外键名称、外键字段以及引用的主表和主键字段。假设我们要在`tfeedbackmessage`表中添加一个外键,引用`TOperationUser`表的`FID`字段,可以使用以下语句: ...

    MySQL创建数据表并建立主外键关系详解

    在已存在的表上添加主外键关系,可以使用`ALTER TABLE`语句: ```sql ALTER TABLE demo.ChinesePinyinInfo ADD CONSTRAINT FK_Name FOREIGN KEY (CharID) REFERENCES ChineseCharInfo(ID); ``` 若要删除主外键...

    MySQL-如果你在添加外键时忘加约束名,如何找到系统默认的约束名

    MySQL-如果你在添加外键时忘加约束名,如何找到系统默认的约束名

    MySQL外键详解

    #### 三、添加外键的格式与约束类型 外键可以通过`ALTER TABLE`命令添加到现有表中,或者在创建表时直接定义。 - **基本语法**: ```sql ALTER TABLE your_table_name ADD [CONSTRAINT constraint_name] ...

    mysql外键的设置方法

    ### MySQL外键设置详解 #### 一、外键的基本概念 在关系型数据库设计中,外键(Foreign Key)是一种非常重要的约束机制,用于确保数据的一致性和完整性。通过定义外键,可以实现不同表之间的关联,从而确保引用的...

Global site tag (gtag.js) - Google Analytics