删除一列如何影响约束
当您删除列时,该列上的所有约束也被删除:
⚫ 所有单列约束被删除。
⚫ 所有引用该列的引用约束被删除。
⚫ 所有引用该列的检查约束被删除。
⚫ 如果列是多列主键约束或唯一约束的一部分,则多列上放置的约束也被删除。此操作接下 来触发引用多列的所有引用约束的删除。
由于当删除列时任何与列相关联的约束被删除,因此当使用此子句时其它表的结构也可能改变。例 如,如果被删除的列是在其它表中被引用的唯一键或者主键,则那些引用约束也被删除。因此那些 其它表的结构也发生改变。
删除一列如何影响触发器
通常,从表中删除列时,基于该表的触发器不变。然而如果您删除的列出现在触发器操作子句中, 删除该列可使得触发器无效。以下语句说明了可能对触发器的影响:
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 语句重新构建该视 图。




