修改、删除和新增约束

本文为您介绍迁移 Oracle 数据库的数据至 OceanBase 数据库 Oracle 租户时,ALTER TABLE DDL 修改、删除和新增约束的支持转换范围。

总览

constraint_clauses:
{ ADD { { out_of_line_constraint }...
      | out_of_line_REF_constraint
      }
| MODIFY { CONSTRAINT constraint_name
         | PRIMARY KEY
         | UNIQUE (column [, column ]...)
         } constraint_state [ CASCADE ]
| RENAME CONSTRAINT old_name TO new_name
| { drop_constraint_clause }...
}

out_of_line_constraint:
[ CONSTRAINT constraint_name ]
{ UNIQUE (column [, column ]...)
| PRIMARY KEY (column [, column ]...)
| FOREIGN KEY (column [, column ]...) references_clause
| CHECK (condition)
} [ constraint_state ]

out_of_line_REF_constraint:
{ SCOPE FOR ({ ref_col | ref_attr })
    IS [ schema. ] scope_table
| REF ({ ref_col | ref_attr }) WITH ROWID
| [ CONSTRAINT constraint_name ] FOREIGN KEY
    ( { ref_col [, ref_col ] | ref_attr [, ref_attr ] } ) references_clause
    [ constraint_state ]
}

drop_constraint_clause:
(
  DROP ( ( PRIMARY KEY
         | UNIQUE "(" (column)... ")"  
         | CONSTRAINT constraint_name ) 
		 [ CASCADE ] [( KEEP | DROP ) INDEX ]
	   ) 
	   [ ONLINE ]
)

支持的范围

仅支持 drop_constraint_clause 子句中的 CONSTRAINT constraint_name 删除约束,并且仅支持每次删除一个。示例如下:

ALTER TABLE T DROP CONSTRAINT CST;

不支持的范围

  • 不支持 DROP PRIMARY KEY\UNIQUE,提示错误。

  • 不支持新增约束,会报错。

  • 不支持修改约束,会报错。

  • 不支持重命名约束,会报错。

忽略的属性

说明

如果同步的 DDL 中包含以下属性的定义,则这些属性不会被解析和转换,最终会被忽略。

  • CASCADE 删除,会忽略。

  • KEEP|DROP INDEX 是否应该保留或删除索引,会忽略。

  • ONLINE 删除约束时允许表的 DML 操作,会忽略。