1.1、创建表时设置外键约束
定义外键时,需要遵守下列规则:
1. 先有主表,再有子表。
2. 必须为主表定义主键。
3. 主键不能包含空值,但允许在外键中出现空值。
4. 外键中,列的数据类型必须和主表主键中对应列的数据类型相同。
-- 语法
CONSTRAINT <外键名>
FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
-- 示例
CREATE TABLE Students
(
StudentID INT PRIMARY KEY AUTO_INCREMENT,
StudentName VARCHAR(255) NOT NULL,
gender ENUM ('男','女','保密'),
Age INT,
ClassID INT,
Constraint FK_Students_Classes FOREIGN KEY (ClassID) REFERENCES Classes (ID)
);
1.2、添加删除外键约束
-- (1)添加外键约束
ALTER TABLE <表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
-- 给学生表ClassID字段添加外键约束
ALTER TABLE Students ADD CONSTRAINT class_fk
FOREIGN KEY(ClassID) REFERENCES Classes(ID);
SHOW CREATE TABLE Students;
-- (2)删除外键约束
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
drop index 外键约束名 on <表名>; -- 同时将索引删除
-- 将学生表ClassID字段的外键约束和索引删除
ALTER TABLE Students DROP FOREIGN KEY class_fk;
Drop Index class_fk on Students; -- 同时将索引删除
1.3、INNODB支持的ON语句
在 MySQL 中,InnoDB 是一种常用的存储引擎,它提供了一些 ON 语句来定义外键约束和触发器。
这些 ON 语句可以在创建或修改外键约束时使用,以定义在不同操作(更新或删除)发生时,从表中的数据应该如何处理。
这些 ON 语句只适用于 InnoDB 存储引擎。
以下是 InnoDB 支持的 ON 语句:
1. ON DELETE RESTRICT:如果关联的主表中的数据被删除,且从表中存在对应的数据,则禁止删除操作。
2. ON DELETE CASCADE:当关联的主表中的数据被删除时,自动删除从表中对应的数据。
3. ON DELETE SET NULL:当关联的主表中的数据被删除时,从表中对应的数据将被设置为 NULL。
4. ON DELETE SET DEFAULT:当关联的主表中的数据被删除时,从表中对应的数据将被设置为默认值。
5. ON UPDATE RESTRICT:如果关联的主表中的数据更新,且从表中存在对应的数据,则禁止更新操作。
6. ON UPDATE CASCADE:当关联的主表中的数据更新时,自动更新从表中的对应数据。
7. ON UPDATE SET NULL:当关联的主表中的数据更新时,从表中对应的数据将被设置为 NULL。
8. ON UPDATE SET DEFAULT:当关联的主表中的数据更新时,从表中对应的数据将被设置为默认值。
-- 简单示例
FOREIGN KEY (DeptID) REFERENCES Departments(DeptID)
ON DELETE CASCADE
ON UPDATE SET NULL;
- 违反外键约束的常见错误
| 错误场景 | 解决方案 |
|---|---|
| 插入从表时外键值不存在 | 确保主表已存在对应记录。 |
| 删除主表记录时从表有依赖 | 使用 ON DELETE CASCADE 或先清理从表数据。 |
| 外键字段与主键类型不匹配 | 统一数据类型和长度。 |
1355

被折叠的 条评论
为什么被折叠?



