我们从一个简单的主键开始:
SQL> CREATE TABLE books(
title VARCHAR2(10),
CONSTRAINT pk_title PRIMARY KEY(title))
ORGANIZATION INDEX;
Table created.
Run Code Online (Sandbox Code Playgroud)
然后意识到它不是唯一的。比如说,一本书可以以相同的标题重新发行:
SQL> ALTER TABLE books ADD(release_date DATE NOT NULL);
Table altered.
Run Code Online (Sandbox Code Playgroud)
现在要插入重新发布的书,我们必须以某种方式放松标题的唯一性。
但是由于表被索引组织,我无法删除和重新创建 PK:
SQL> ALTER TABLE books DROP PRIMARY KEY;
ALTER TABLE books DROP PRIMARY KEY
*
ERROR at line 1:
ORA-25188: cannot drop/disable/defer the primary key constraint for
index-organized tables or sorted hash cluster
Run Code Online (Sandbox Code Playgroud)
我也无法设法就地扩展现有密钥:
SQL> CREATE UNIQUE INDEX pk_title_date ON books(title, release_date);
Index created.
SQL> ALTER TABLE books MODIFY PRIMARY KEY USING …
Run Code Online (Sandbox Code Playgroud) oracle ×1