美文网首页
关于约束的创建、启用和停止

关于约束的创建、启用和停止

作者: moutory | 来源:发表于2024-06-25 20:16 被阅读0次

前言

oracle作为关系型数据库的典范,推荐开发人员在应用过程中使用外键约束、非空约束等约束来保障数据的一致性和稳定性,但是这种约束在某些时候可能会带来一定的困扰,尤其是需要删除数据或者迁移数据的时候,让我们的操作变得繁琐,实际上oracle对于约束的使用是比较灵活的,它支持我们在创建和启用约束后,通过关闭约束的操作来实现数据的删除和迁移。
话不多说,下面进入正题

(一)创建约束

语法:alter table table_name add constraint constraint_name [constraint_type] (columnName);

  • 主键约束
    ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column1);
  • 唯一性约束
    ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column1);
  • 外键约束
    ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column1) REFERENCES referenced_table (referenced_column);
  • 检查约束
    ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (column1 > 0);
  • 非空约束
    ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (column1 IS NOT NULL);
  • 级联约束
    ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column1) REFERENCES referenced_table (referenced_column) ON DELETE CASCADE ON UPDATE CASCADE;

(二)启用/停止约束

1、启用索引
  • 使用enable (validate)模式
    alter table table_name enable constraint constraint_name;
  • 使用enable novalidate模式,启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据.
    alter table table_name enable novalidate constraint constraint_name;
2、 禁用外键约束
  • 使用disable( novalidate)模式
    关闭约束,删除索引,可以对约束列的数据进行修改等操作.
    alter table table_name disable constraint constraint_name;

  • 使用disable validate 模式
    关闭约束,删除索引,不能对表进行 插入/更新/删除等操作.
    alter table table_name disable validate constraint constraint_name;

简而言之,disable validate模式保持了数据的完整性,不允许任何可能违反约束的操作

(三)查看表对象的约束

我们可以通过user_constraints视图来查看用户下所有的constraint约束、所属表名、所属用户和状态信息等等。其中,CONSTRAINT_TYPE表示约束的类型,对应关系可以看下文的解释。

约束视图
constraint_type值及其含义:

P - 主键(Primary Key)约束。确保表中的每行都有一个唯一的标识符。
U - 唯一性(Unique)约束。确保列或列的组合中的所有值都是唯一的,但允许有空值。
R - 外键(Foreign Key)约束。用于维护两个表之间的链接,确保引用的数据的完整性。
C - 检查(Check)约束。用于限制列中可以插入的数据值,以满足特定的条件。
V - 视图(View)约束。虽然不是标准的约束类型,但有时在某些上下文中可能用于标识视图。
E - 排除(Exclude)约束。这是一种特殊类型的约束,用于确保在表中不会插入重复的行。
R_C - 域(Domain)约束。用于限制特定域内的数据值。
S - 序列(Sequence)约束。虽然序列本身不是约束,但它们可以用于生成满足特定约束的值。
T - 触发器(Trigger)约束。虽然触发器不是直接的约束类型,但它们可以用于强制约束。

相关文章

网友评论

      本文标题:关于约束的创建、启用和停止

      本文链接:https://www.haomeiwen.com/subject/mxyjcjtx.html