Oracle数据完整性约束常用操作

  1. 信息查询
    SELECT * FROM dba_cons_columns;

    SELECT constraint_name, table_name, constraint_type, status, deferrable, deferred, validated FROM dba_constraints;
  2. 变更约束执行时间(是否延缓执行,只对可延缓约束有效)
    SET CONSTRAINTS xxx IMMEDIATE;              --立即

    SET CONSTRAINTS xxx DEFERRED;                --延缓
  3. 添加约束
    ALTER TABLE xxx.yyy ADD CONSTRAINT event_evtid_pk PRIMARY_KEY (evtid) [DEFERRABLE [initially deferred]] USING INDEX STROAGE(INITIAL 300K NEXT 300K) TABLESPACE ccc;
  4. 改变约束状态
    ALTER TABLE xxx.yyy ENABLE|DISABLE VALIDATE|NOVALIDATE CONSTRAINT ccc;
  5. 利用官方提供的system.Exceptions表查找违反约束的地方.
    a.) 如果没有该表,运行$ORACLE_HOME/rdbms/admin目录下的utlexpt1.sql进行创建
         例如:        @D:/Tools/oracle/product/10.2.0/db_1/RDBMS/ADMIN/utlexpt1.sql
    b.)执行语句是加上以下后缀: EXCEPTIONS INTO system.exceptions, 如:
         ALTER TABLE scott.emp DISABLE NOVALIDATE CONSTRAINT PK_EMP;
         INSERT INTO scott.emp(empno) VALUES (7788);
         ALTER TABLE scott.emp ENABLE VALIDATE CONSTRAINT PK_EMP EXCEPTIONS INTO system.exceptions;

         此时使用以下查询即可以找出问题:
         SELECT rowid, this.* FROM scott.emp this WHERE ROWID IN (SELECT row_id FROM exceptions);

         通过查询出来的rowid找到问题并解决之后,即可以改变约束状态了.
  6. 重命名约束
    ALTER TABLE xxx.yyy RENAME CONSTRAINT ccc TO ccc_new;
  7. 删除约束
    ALTER TABLE xxx.yyy DROP CONSTRAINT ccc [CASCADE];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值