MySQL中的外键(Foreign Key)是一种数据库约束,用于建立两个表之间的关联关系。外键确保一个表中的数据与另一个表中的数据保持一致性和完整性。外键约束要求一个表中的列值必须是另一个表中主键列的子集。
MySQL中的外键约束主要有以下几种类型:
外键约束广泛应用于需要维护数据关联关系的场景,例如:
外键冲突通常发生在以下几种情况:
外键冲突的原因通常包括:
假设有两个表:orders(订单表)和customers(客户表),orders表中的customer_id是外键,引用customers表中的id。
-- 创建客户表
CREATE TABLE customers (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL
);
-- 创建订单表
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE
);
-- 插入客户数据
INSERT INTO customers (name) VALUES ('Alice'), ('Bob');
-- 插入订单数据
INSERT INTO orders (customer_id, order_date) VALUES (1, '2023-01-01'), (2, '2023-01-02');
-- 尝试插入一个无效的外键值
INSERT INTO orders (customer_id, order_date) VALUES (3, '2023-01-03'); -- 这将导致外键冲突
-- 解决方法:确保外键值存在
INSERT INTO customers (name) VALUES ('Charlie');
INSERT INTO orders (customer_id, order_date) VALUES (3, '2023-01-03'); -- 现在可以成功插入
-- 删除客户数据
DELETE FROM customers WHERE id = 1; -- 由于ON DELETE CASCADE,相关的订单也会被删除