GBase8s数据库级联删除表时的注意事项

当使用 CREATE TABLE 或 ALTER TABLE 语句的 REFERENCES 子句的 ON DELETE

CASCADE 选项时,即指定了您想从一个表级联地删除到另一个表。例如,在 stores_demo 数据

库中,stock 表包含作为主键的列 stock_num。catalog 和 items 表中每一个表都包含作为外键的

用 ON DELETE CASCADE 选项指定的列 stock_num 。当从 stock 表执行删除操作是,也会在

catalog 和 items 表(这两个表通过外键引用)中删除行。

要使 DELETE 操作级联到一个含有对父表的引用约束的表,您只需要拥有对 DELETE 语句中的

引用的父表的 Delect 特权。

如果使用级联删除一个或多个子表引用的表执行不带 WHERE 子句的 DELETE 操作,则 GBase

8s 从该表及其任何受影响的子表删除所有的行。(这类似于 TRUNCATE 语句的作用,但是在具

有子表引用它的表上 GBase 8s 不支持 TRUNCATE 操作。)

表有级联删除时对 DELETE 的限制

你不可以使用相关子查询查询中的子表从父表删除行。如果两个子表引用相同的父表,并且一个子

表指定级联删除但另一个子表没有指定,那么如果您尝试从父表中删除同时应用于这两个子表的

行,则删除失败,并且不会从父表或子表删除任何行。

级联删除的锁定和记录日志牵连

在删除期间,数据库服务器会在被引用的表以及正在引用的表的所有符合条件的行上放置锁。

GBase 8s 要求对级联删除进行事务日志记录。如果在不符合 ANSI 的数据库中改变日志记录,即

使是临时关闭,那么删除操作也不会级联地执行,因为您无法回滚任何操作。例如,如果删除一个

父行,但在删除子行之前系统发生故障,那么数据库将含有悬挂的子记录,这违反了参照完整性。

但是,在重新打开日志记录之后,随后的删除是级联的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值