外键用于维护表间引用完整性,确保子表的外键值必须在父表主键或唯一键中存在。1. 创建表时可通过FOREIGN KEY定义外键,如订单表user_id引用用户表id,并设置ON DELETE CASCADE实现级联删除;2. 已有表可用ALTER TABLE ADD CONSTRAINT添加外键;3. 外键行为包括CASCADE(级联)、SET NULL(置空)和RESTRICT(限制)等;4. 使用SHOW CREATE TABLE或information_schema查看外键;5. 用ALTER TABLE DROP FOREIGN KEY删除外键约束,必要时手动删除索引;注意仅InnoDB引擎支持外键。

在MySQL中使用FOREIGN KEY(外键)是为了维护表与表之间的引用完整性。外键约束确保一个表中的数据必须在另一个表的主键或唯一键中存在,从而防止无效数据的插入和不一致的状态。
什么是FOREIGN KEY
外键是一个表中的字段,它指向另一个表的主键(PRIMARY KEY)或唯一键(UNIQUE KEY)。被引用的表称为父表,包含外键的表称为子表。外键用于建立和强制两个表之间的链接关系。
创建外键的语法
可以在创建表时定义外键,也可以在已有表上通过ALTER TABLE添加。
1. 创建表时设置外键:示例:创建用户表和订单表,订单表中的user_id引用用户表的id。
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL
);
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
2. 已有表添加外键:
如果orders表已存在,可以使用ALTER TABLE添加外键约束:
ALTER TABLE orders ADD CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE;
外键约束的行为控制(ON DELETE 和 ON UPDATE)
外键可以指定当父表记录被删除或更新时,子表应如何响应:
- ON DELETE CASCADE:父表记录删除时,子表相关记录也自动删除。
- ON DELETE SET NULL:父表记录删除时,子表外键字段设为NULL(字段需允许NULL)。
- ON DELETE RESTRICT / NO ACTION:如果子表有引用,禁止删除父表记录。
- ON UPDATE CASCADE:父表主键更新时,子表外键值同步更新。
查看和删除外键
要查看某个表的外键信息,可使用:
SHOW CREATE TABLE orders;
或查询information_schema:
SELECT
CONSTRAINT_NAME,
COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM
information_schema.KEY_COLUMN_USAGE
WHERE
TABLE_NAME = 'orders'
AND REFERENCED_TABLE_NAME IS NOT NULL;
删除外键约束:
ALTER TABLE orders DROP FOREIGN KEY fk_user_id;
注意:删除后若需删除索引,还需单独执行DROP INDEX(外键字段通常会自动创建索引)。
基本上就这些。只要理解了表间关联逻辑,设置外键并不复杂,但能有效提升数据一致性。记得引擎使用InnoDB,MyISAM不支持外键。










