SQL常见约束及外键约束删除更新行为
    		       		warning:
    		            这篇文章距离上次修改已过424天,其中的内容可能已经有所变动。
    		        
        		                
                在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 -- 不执行操作
);在实际操作中,你需要根据数据的一致性和完整性要求来选择合适的外键约束行为。
评论已关闭