暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8s SQL 指南:教程_7 修改数据 (26)对数据库级对其对象的权限

GBASE数据库 2022-01-06
344

ON DELETE CASCADE 选项

当您从主键为表删除行时,要保持引用完整性,请使用 CREATE TABLE 和 ALTER TABLE 语句的 REFERENCES 子句中的 ON DELETE CASCADE 选项。此选项允许您使 用单个删除命令从父表删除一行以及在相匹配的子表中它的对应行。 

在级联删除期间锁定 

在删除期间,保持父表和子表上的所有符合条件的行上的锁定。当您指定删除时,在执行 任何引用操作之前,执行从父表请求的删除。 多个子表的情况 如果您具有带有两个子约束的父表,一个子表指定了级联删除,另一个子表没有级联删除, 且您尝试从同时应用于两个子表的父表删除一行,则 DELETE 语句失败,且从父表和子表 都不删除行。 

必须打开日志记录 

为了使级联删除起作用,您必须在您的当前数据库中打开日志记录。在事务日志记录中讨论日志记录和级联删除。

级联删除的示例 

假设您有应用了引用完整性规则的两个表,父表 accounts,以及子表 sub_accounts。下列 CREATE TABLE 语句定义引用约束:


accounts 表的主键,acc_num 列,使用 SERIAL 数据类型,sub_accounts 表的外键, ref_num 列,使用 INTEGER 数据类型。允许组合主键上的 SERIAL 与外键上的 INTEGER 数据类型。仅在此条件下,您可混合并匹配数据类型。SERIAL 数据类型是 INTEGER,且 数据库自动地为该列生成值。所有其他主键与外键组合都必须显式地相匹配。

例如,定义 为 CHAR 的主键必须与定义为 CHAR 的外键相匹配。 sub_accounts 表的外键的定义,ref_num 列,包括 ON DELETE CASCADE 选项。此选项指 定在父表 accounts 中任何行的删除都将自动地导致删除子表 sub_accounts 的对应行。

要从将级联删除 sub_accounts 表的 accounts 表删除一行,您必须打开日志记录。打开日志 记录之后,您可从两个表都删除账户编号 2,如下例所示:


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论