用户工具

站点工具


编程积累:数据库:common:删除主键约束同时删除同名的索引

删除主键约束的同时是否会删除同名的索引,取决于该同名的索引是创建主键约束时自动创建的,还是创建主键约束前手动创建的。

当我们用如下语句创建主键约束时,会自动创建同名的索引:

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME PRIMARY KEY (FIELD1, FIELD2, FIELD3);

这个索引在主键约束被删除时会自动被删除:

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

如果换一种方式:

1. 先创建主键索引

CREATE UNIQUE INDEX CONSTRAINT_NAME ON TABLE_NAME (FIELD1, FIELD2, FIELD3);

2. 再创建主键约束

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME PRIMARY KEY (FIELD1, FIELD2, FIELD3);

这时,再通过

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

无法删除索引,只能删除主键约束。经测试,这个在Oracle和DB2下面表现是一致的。

在Oracle数据库下,可以通过如下语句把主键约束和索引一起删除:

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME CASCADE DROP INDEX;

DB2下暂时不知道用什么简单的语句,用存储过程是可以实现的。

评论

请输入您的评论. 可以使用维基语法:
 
编程积累/数据库/common/删除主键约束同时删除同名的索引.txt · 最后更改: 2018/09/15 22:51 由 eric