MySQL 外键 4 months ago
什么是 MySQL 外键?
- 定义: 外键(Foreign Key)是用于建立两个表之间连接的一种约束,它指向另一个表的主键。
- 作用:
- 维护数据完整性: 外键确保一个表中的数据引用了另一个表中存在的数据,防止出现“孤儿数据”。
- 实现表与表之间的关联: 外键定义了表与表之间的关系,方便进行关联查询。
外键的特点
- 外键列: 包含外键的列被称为外键列。
- 参考表: 外键所指向的表被称为参考表。
- 主键: 外键必须引用参考表中的主键。
- 级联操作: 可以设置外键的级联操作,当参考表中的数据发生变化时,自动更新或删除相关联的子表数据。
如何创建外键?
1. 在创建表时定义外键
CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(255) NOT NULL,
customer_email VARCHAR(255) UNIQUE,
customer_city VARCHAR(255),
customer_country VARCHAR(255)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
);
FOREIGN KEY (customer_id)
: 指定orders
表中的customer_id
列作为外键REFERENCES customers(customer_id)
: 指定外键引用customers
表的customer_id
列(该列必须是主键)。ON DELETE CASCADE
: 表示当删除customers
表中的客户数据时,自动删除orders
表中相关联的订单数据。
2. 在已存在的表上添加外键
ALTER TABLE orders
ADD FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
- 使用
ALTER TABLE
语句在已存在的表上添加外键。
3. 级联操作
可以在创建外键时指定级联操作,以定义当参考表中的数据发生变化时,如何处理子表中的相关数据。
ON DELETE CASCADE
: 当删除参考表中的数据时,自动删除子表中相关联的数据。ON UPDATE CASCADE
: 当更新参考表中的数据时,自动更新子表中相关联的数据。ON DELETE SET NULL
: 当删除参考表中的数据时,将子表中相关联数据的外键列设置为NULL
。ON UPDATE SET NULL
: 当更新参考表中的数据时,将子表中相关联数据的外键列设置为NULL
。ON DELETE NO ACTION
或ON UPDATE NO ACTION
: 当删除或更新参考表中的数据时,阻止操作,并引发错误。
示例:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
);
外键的注意事项
- 外键列的数据类型必须与参考表主键列的数据类型相同。
- 外键列可以为空,表示不引用任何数据。
- 一个表可以有多个外键,引用不同的参考表。
- 外键约束会影响数据库的性能,特别是在大型表上。
总结
外键是 MySQL 中用于维护数据完整性和实现表之间关联的重要工具。通过合理使用外键,可以确保数据库中数据的一致性和准确性。
- 上一篇: sql like
- 下一篇: 详解 sql index