我想创建一个具有命名外键约束并有命名索引支持的表bar
。我想在create table DDL语句中使用内联定义来做到这一点。查看Oracle 19 SQL Language Reference时,似乎Oracle应该支持内联。
执行以下语句时...
create table foo (
id number not null primary key
);
create table bar (
id number not null primary key,
nick varchar2(16) not null constraint foo_nick_ck unique using index,
foo_id number not null constraint foo_fk references foo using index
);
Oracle将以[42000][907] ORA-00907: missing right parenthesis
进行响应,并指向最后一行using index
之前的位置。如果删除using index
,它将起作用(但当然不会创建索引)。我保留了列nick
作为其内联创建后备索引的工作的示例,但使用的是唯一约束而不是外键约束。
我知道一种解决方法是在单独的DDL语句中创建后备索引,但是我非常想使其内联整洁。
我知道一种解决方法是在单独的DDL语句中创建后备索引,但是我非常想使其内在整洁。
遗憾的是,不存在用于内联创建索引的语法。
[USING INDEX子句是语法糖:无论我们是否包含该子句(*),Oracle都会创建索引来实施主键和唯一性约束。这是因为索引对于Oracle实施唯一约束是必需的。但是不需要索引来强制使用外键,这只是可取的。
(*)除非Oracle可以在约束列上使用现有索引。