MySQL中的外键(Foreign Key)是一种数据库约束,用于确保一个表中的数据与另一个表中的数据保持一致。外键约束确保了引用完整性,即只有在被引用的表中存在的值才能被插入到含有外键的表中。
MySQL中的外键约束主要有以下几种类型:
外键约束广泛应用于需要维护数据一致性和引用完整性的场景,例如:
删除有外键的元组时,需要考虑外键约束的影响。以下是几种常见的处理方式:
CREATE TABLE parent (
id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE child (
id INT PRIMARY KEY,
parent_id INT,
name VARCHAR(255),
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
);
-- 插入数据
INSERT INTO parent (id, name) VALUES (1, 'Parent1');
INSERT INTO child (id, parent_id, name) VALUES (1, 1, 'Child1');
-- 删除父表记录,子表相关记录也会被删除
DELETE FROM parent WHERE id = 1;
CREATE TABLE parent (
id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE child (
id INT PRIMARY KEY,
parent_id INT,
name VARCHAR(255),
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL
);
-- 插入数据
INSERT INTO parent (id, name) VALUES (1, 'Parent1');
INSERT INTO child (id, parent_id, name) VALUES (1, 1, 'Child1');
-- 删除父表记录,子表相关记录的外键会被设置为NULL
DELETE FROM parent WHERE id = 1;
CREATE TABLE parent (
id INT PRIMARY KEY,
name VARCHAR(255)
);
CREATE TABLE child (
id INT PRIMARY KEY,
parent_id INT,
name VARCHAR(255),
FOREIGN KEY (parent_id) REFERENCES parent(id)
);
-- 插入数据
INSERT INTO parent (id, name) VALUES (1, 'Parent1');
INSERT INTO child (id, parent_id, name) VALUES (1, 1, 'Child1');
-- 手动删除子表记录
DELETE FROM child WHERE parent_id = 1;
-- 删除父表记录
DELETE FROM parent WHERE id = 1;
原因:删除操作违反了外键约束,子表中仍有引用该记录的外键。
解决方法:
CASCADE
或SET NULL
删除。原因:删除操作未正确处理外键约束,导致子表中仍有孤立记录。
解决方法:
领取专属 10元无门槛券
手把手带您无忧上云