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中添加外键的方法。 1. **建表时直接使用 FOREIGN KEY** 当创建新表时,可以直接在CREATE TABLE语句中定义外键。这种方法的语法如下: ```sql CREATE TABLE table_name ( column1 ...
如果表已经存在且之前没有定义外键,可以使用ALTER TABLE语句来添加外键,如下: ```sql ALTER TABLE 表名 ADD FOREIGN KEY(字段名) REFERENCES 外键表名(外键列名); ``` 在使用ALTER TABLE语句时,如果需要删除...
在 MySQL 中,添加外键可以使用ALTER TABLE语句,例如: ``` ALTER TABLE ss_accesscode ADD FOREIGN KEY (vccId) REFERENCES ss_vcc(vccId) ON DELETE CASCADE; ``` 这条语句将在ss_accesscode表中添加一个外键约束...
前言 这篇文章主要涉及到在数据创建表时,遇到ERROR 1215 (HY000): Cannot add foreign key constraint 问题方面的内容,对于在数据创建表时,遇到同样问题感兴趣的同学可以参考一下。 一、问题的提出 ...
MySQL 处理添加外键时提示 Error 150 问题的解决方法 MySQL 中添加外键时,可能会遇到 Error 150 的问题,这个问题是 MySQL 本身的 bug,已经被报告到 MySQL 开发者列表中很多年了。然而,导致这个错误的原因却并...
- 使用`ALTER TABLE`语句可以添加、修改或删除外键约束。 - 删除外键约束时,应先确保没有相关记录,以避免违反参照完整性。 6. **外键的优点** - 保证数据的一致性:外键约束确保了只有有效的主键值才能被引用...
为了保证数据的完整性,将两张表之间的数据建立关系,因此就需要在成绩表中添加外键约束。 外键的定义可以概括为:外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束。外键用来...
建立外键的前提:本表的列必须与外键类型相同(外键必须是外表主键)。 外键作用: 使两张表形成关联,外键只能引用外表中的列的值! 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键...
- `yourtablename`:指需要添加外键约束的表名。 - `index_col_name`:指被定义为外键的列名。 - `tbl_name`:指定主表的名称。 - `ON DELETE` 和 `ON UPDATE`:定义当主表的记录被删除或更新时,从表中受影响的记录...
### 如何在MySQL数据库中定义外键 #### 定义数据表 假设某电脑生产商的数据库中包含了整机产品信息和配件供货信息。为了更好地管理这些信息,我们需要创建两个数据表:`pc` 表用于存储整机产品信息,而 `parts` 表...
二、添加外键的格式 添加外键的格式为: ALTER TABLE yourtablename ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {CASCADE | SET NULL...
在创建完两个表后,需要在“student”表中为`gid`字段添加外键约束,指向“grade”表的`id`字段。 ```sql ALTER TABLE student ADD CONSTRAINT FK_ID FOREIGN KEY (gid) REFERENCES grade (id); ``` 此命令...
添加外键约束时,你需要在`ALTER TABLE`语句中指定从表、外键名称、外键字段以及引用的主表和主键字段。假设我们要在`tfeedbackmessage`表中添加一个外键,引用`TOperationUser`表的`FID`字段,可以使用以下语句: ...
在已存在的表上添加主外键关系,可以使用`ALTER TABLE`语句: ```sql ALTER TABLE demo.ChinesePinyinInfo ADD CONSTRAINT FK_Name FOREIGN KEY (CharID) REFERENCES ChineseCharInfo(ID); ``` 若要删除主外键...
MySQL-如果你在添加外键时忘加约束名,如何找到系统默认的约束名
#### 三、添加外键的格式与约束类型 外键可以通过`ALTER TABLE`命令添加到现有表中,或者在创建表时直接定义。 - **基本语法**: ```sql ALTER TABLE your_table_name ADD [CONSTRAINT constraint_name] ...
### MySQL外键设置详解 #### 一、外键的基本概念 在关系型数据库设计中,外键(Foreign Key)是一种非常重要的约束机制,用于确保数据的一致性和完整性。通过定义外键,可以实现不同表之间的关联,从而确保引用的...