正确与否?
alter table test
add constraint test_fk foreign key (prim_id)
references prim (prim_id)
using index
(create index i_test_prim_fk
on test(prim_id) tablespace index01)
on delete cascade
/
也许这里不允许使用索引?
使用索引 * 第 4 行错误: ORA-01735: 无效的 ALTER TABLE 选项
尝试创建fk预期错误
最好的检查方法是阅读文档。
ALTER TABLE
具有 语法:
constraint_clauses::=
out_of_line_ref_constraint::=
references_clause::=
constraint_state::=
using_index::=
然后
CREATE INDEX
语法是 here。
using_index
子句指定以下限制:
using_index_clause
仅在启用唯一键或主键约束时才可以指定
。您可以按任意顺序指定using_index_clause
的子句,但每个子句只能指定一次。using_index_clause
如果指定
,则 Oracle 会尝试使用指定索引强制执行约束。如果 Oracle 找不到索引或无法使用索引来强制执行约束,则 Oracle 将返回错误。schema.index
如果指定
,则 Oracle 会尝试创建索引并使用它来强制执行约束。如果 Oracle 无法创建索引或无法使用索引来强制执行约束,则 Oracle 将返回错误。create_index_statement
如果您既不指定现有索引也不创建新索引,则 Oracle 会创建该索引。在这种情况下:
- 索引与约束具有相同的名称。
- 如果表已分区,则可以为唯一或主键约束指定本地或全局分区索引。
限制
using_index_clause
以下限制适用于 using_index_clause:
- 您不能为视图约束指定此子句。
- 您不能为 NOT NULL、外键或检查约束指定此子句。
- 启用索引组织表的主键时,不能指定索引 (
) 或创建索引 (schema.index
)。create_index_statement
- 您无法指定
中的parallel_clause
。index_attributes
的INDEXTYPE IS ...
子句在约束定义中无效。index_properties
不,您的声明无效,因为:
ON DELETE CASCADE
应位于 USING INDEX
之前。USING INDEX
应创建唯一索引或主键索引。prim
而不是 test
。您可以使用两个语句:
ALTER TABLE prim
ADD CONSTRAINT pk__prim__prim_id
PRIMARY KEY (prim_id)
USING INDEX (CREATE UNIQUE INDEX i__prim__prim_id__u ON prim(prim_id))
/
alter table test
add constraint test_fk
foreign key (prim_id)
references prim (prim_id)
on delete cascade
/