MySQL外键定义详解
语句解析
user_id INT(11) NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
这条语句定义了一个外键约束,下面逐词解析:
user_id - 字段名称,表示用户ID
INT(11) - 整数类型,显示宽度为11位
NOT NULL - 约束条件,表示该字段不允许为空值
FOREIGN KEY (user_id) - 声明user_id字段为外键
REFERENCES users(id) - 指定外键引用users表的id字段
ON DELETE CASCADE - 级联删除策略,当users表中被引用的记录被删除时,自动删除本表中关联的记录
外键约束的作用
外键(Foreign Key)用于建立两个表之间的关联关系,确保数据的一致性和完整性。主要功能包括:
阻止从表插入主表不存在的外键值
阻止从表修改外键值为主表不存在的主键值
根据设置的策略处理主表记录的删除和更新
外键使用示例
假设我们有两个表:users(用户表)和orders(订单表):
-- 创建主表(users) CREATE TABLE users ( id INT(11) PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL ); -- 创建从表(orders)并设置外键 CREATE TABLE orders ( order_id INT(11) PRIMARY KEY AUTO_INCREMENT, user_id INT(11) NOT NULL, order_date DATETIME, amount DECIMAL(10,2), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );
在这个例子中:
orders表的user_id字段是外键,引用users表的id字段当
users表中的某个用户被删除时,该用户的所有订单也会被自动删除(因为设置了ON DELETE CASCADE)
外键约束选项详解
MySQL支持以下几种外键约束策略:
外键使用注意事项
表引擎要求:两个表都必须是InnoDB引擎,MyISAM不支持外键
索引要求:外键字段必须建立索引,MySQL 4.1.2+会自动创建
数据类型:外键和引用的主键必须数据类型兼容
性能影响:外键约束会增加数据库开销,但能保证数据完整性
自引用:一个表可以引用自身的主键(自参照完整性)