?以下 DDL 语句创建了名为 parent 的表且在该表的 c1 列上定义了唯一索引和主键约束:?
CREATE TABLE parent(c1 INT, c2 INT, c3 INT);?
CREATE UNIQUE INDEX idx_parent_c1 ON parent(c1);
ALTER TABLE parent ADD CONSTRAINT
PRIMARY KEY(c1) CONSTRAINT cons_parent_c1;?
以下语句创建了另一个表,名为 child,它的第一列与 parent 表的主键列的数据类型相同,并在 child 表定义主键约束 cons_child_x:?
CREATE TABLE child(x1 INT, x2 INT, x3 VARCHAR(32));?
ALTER TABLE child
ADD CONSTRAINT (FOREIGN KEY(x1)
REFERENCES parent(c1) CONSTRAINT cons_child_x1);?
假设之后的 DML 操作(未显示)向此 parent 表和 child 表填充数据行。在一些点,此工作流程要求数据从它的 OLTP 产品环境移动到另一个处理业务分析应用程序的数据库中。?
如果在这一点,child 表中的数据集包含大量行,则验证 cons_child_x1 引用约束将会是新数据库导入 child 表要花费的显著成本。以下语句删除此约束:
ALTER TABLE child DROP CONSTRAINT cons_child_x1;?
child 表导入到新的环境后,下列语句可以在 child 表上重建一个相同名称的约束,而不用检查每一行的参照完整性违规:?
ALTER TABLE child?
ADD CONSTRAINT (FOREIGN KEY(x1)?
REFERENCES parent(c1)
CONSTRAINT cons_child_x1 NOVALIDATE);?
ALTER TABLE 语句执行完毕之后,新的 cons_child_x1 引用约束在缺省情况下处于 ENABLED 方式。