SQL常见约束及外键约束删除更新行为
在SQL中,外键约束影响表之间的数据完整性和一致性。当我们试图删除或更新一个包含外键约束的表中的数据时,外键约束会指定相关操作的行为。
以下是几种常见的外键约束和它们对删除和更新操作的影响:
CASCADE
:当父表中的数据被删除或更新时,自动删除或更新子表中相关的数据。SET NULL
:当父表中的数据被删除或更新时,子表中相关的外键列被设置为NULL。NO ACTION
:如果子表中有相关数据,父表中的删除或更新操作将不被允许。RESTRICT
:类似于NO ACTION
,但是在删除或更新父表中的数据之前,子表中的相关数据必须存在。
以下是创建外键约束并指定不同操作的SQL示例:
-- 创建一个父表
CREATE TABLE parent_table (
id INT PRIMARY KEY,
data VARCHAR(255)
);
-- 创建一个子表,其中包含一个外键约束指向父表
CREATE TABLE child_table (
id INT PRIMARY KEY,
parent_id INT,
data VARCHAR(255),
FOREIGN KEY (parent_id) REFERENCES parent_table(id)
ON DELETE CASCADE -- 级联删除
ON UPDATE CASCADE -- 级联更新
);
-- 或者使用SET NULL
CREATE TABLE child_table (
id INT PRIMARY KEY,
parent_id INT,
data VARCHAR(255),
FOREIGN KEY (parent_id) REFERENCES parent_table(id)
ON DELETE SET NULL -- 设置为NULL
ON UPDATE CASCADE -- 更新时级联到父表
);
-- 或者使用NO ACTION或RESTRICT,这两者基本相同,只有在尝试删除或更新父表中的数据时才会被触发
CREATE TABLE child_table (
id INT PRIMARY KEY,
parent_id INT,
data VARCHAR(255),
FOREIGN KEY (parent_id) REFERENCES parent_table(id)
ON DELETE NO ACTION -- 不执行操作
ON UPDATE NO ACTION -- 不执行操作
);
在实际操作中,你需要根据数据的一致性和完整性要求来选择合适的外键约束行为。
评论已关闭