如果变更的列是索引的一部分,那么表仍会定点变更,但此种情况下数据库服务器会默示地重新建立一个或多个索引。如果不需要重建索引,应在执行更改操作之前将其删除或禁用。 执行这些步骤可以提高性能。
但是,如果修改的列是主键或外键,而且您想要保持这种约束,那么您必须再次在 ALTER TABLE 语句中指定这些关键字,而且数据库服务器将重建索引。
CREATE TABLE parent (si SMALLINT PRIMARY KEY CONSTRAINT pkey); CREATE TABLE child (si SMALLINT REFERENCES parent ON DELETE CASCADE CONSTRAINT ckey); INSERT INTO parent (si) VALUES (1); INSERT INTO parent (si) VALUES (2); INSERT INTO child (si) VALUES (1); INSERT INTO child (si) VALUES (2); ALTER TABLE parent MODIFY (si INT PRIMARY KEY CONSTRAINT pkey);
ALTER TABLE child MODIFY (si int references parent on delete cascade constraint ckey);