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

删除一列 对约束&触发器&视图的影响——GBASE南大通用

原创 郑小雯 2023-12-13
118

删除一列如何影响约束 

  当您删除列时,该列上的所有约束也被删除:

⚫ 所有单列约束被删除。

⚫ 所有引用该列的引用约束被删除。  

 ⚫ 所有引用该列的检查约束被删除。 

如果列是多列主键约束或唯一约束的一部分,则多列上放置的约束也被删除。此操作接下 来触发引用多列的所有引用约束的删除。 

由于当删除列时任何与列相关联的约束被删除,因此当使用此子句时其它表的结构也可能改变。例 如,如果被删除的列是在其它表中被引用的唯一键或者主键,则那些引用约束也被删除。因此那些 其它表的结构也发生改变。

删除一列如何影响触发器 

通常,从表中删除列时,基于该表的触发器不变。然而如果您删除的列出现在触发器操作子句中, 删除该列可使得触发器无效。以下语句说明了可能对触发器的影响:

CREATE TABLE tab1 (i1 int, i2 int, i3 int); 

 CREATE TABLE tab2 (i4 int, i5 int); 

 CREATE TRIGGER col1trig UPDATE OF i2 ON tab1 

 BEFORE(INSERT INTO tab2 VALUES(1,1));

 ALTER TABLE tab2 DROP i4; 

ALTER TABLE 语句之后,tab2 仅有一列。col1trig 触发器已失效,因为当前用两列的值定义的 操作子句不能发生。 

如果您删除了在 UPDATE 触发器的触发列列表中出现的列,则数据库服务器从触发列列表删除该 列。如果列是触发列列表的唯一成员,则数据库服务器从表删除该触发器。有关 UPDATE 触发器 中触发列的更多信息,请参阅 CREATE TRIGGER 语句 。

如果更改底层的表使触发器失效,则删除然后重新创建触发器。

删除一列如何影响视图

当您从表删除列时,基于该表的视图保持不变。也就是,数据库服务器不自动从关联的视图删除对 应的列。

视图没有自动删除,因为 ALTER TABLE 可通过删除一列然后用相同的名称添加一个新的列来更 改表中列的顺序。这种情况下,基于已改变的表的视图继续有效,但是保留它们原始的列顺序。

如果更改底层的表使视图失效,您必须使用 DROP VIEW 和 CREATE VIEW 语句重新构建该视 图。

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

评论