数据完整性

1.设置外键

  alter table emp add constraint fk_deptno

   foreign key (deptno)

  references dept(deptno)

on delete cascade(on delete set null)

 

2.

 

 SQL> create table t(id int,name varchar2(10));
 Table created

 

SQL> alter table t add primary key(id) disable;
 
Table altered

 

SQL> insert into t values(0,'aaa');
 
1 row inserted
 
SQL> insert into t values(0,'aaa');
 
1 row inserted
 
SQL> commit;
 
Commit complete

 

SQL> alter table t enable novalidate primary key;
 
alter table t enable novalidate primary key
 
ORA-02437: 无法验证 (SCOTT.SYS_C005749) - 违反主键

 

SQL> select constraint_name,status,validated from user_constraints;
 
CONSTRAINT_NAME                STATUS   VALIDATED
------------------------------ -------- -------------
SYS_C005570                    ENABLED  VALIDATED
BIN$4CKUMzBwRX+B953AZVY4Cg==$0 ENABLED  VALIDATED
BIN$qE45XNIKSfqVGjL2aKMfHg==$0 ENABLED  VALIDATED
FK_DEPTNO                      ENABLED  VALIDATED
PK_DEPT                        ENABLED  VALIDATED
PK_EMP                         ENABLED  VALIDATED
BIN$TPL0tu4yR8yHZ8DCl8NC/g==$0 ENABLED  VALIDATED
PK_NN                          ENABLED  VALIDATED
BIN$ao1FsgCmRFqx3eIYxceqQA==$0 ENABLED  VALIDATED
BIN$agHX/iByTQaxz+QMkNz91g==$0 ENABLED  VALIDATED
SALARY_DETAILS_EMPCODE_PK      ENABLED  VALIDATED
SYS_C005749                    DISABLED NOT VALIDATED
 

12 rows selected

 

3.设定延迟约束

 SQL> select index_name,index_type,table_name from user_indexes where table_name
= 'T';

未选定行

 

alter table t add primary key (id) deferrable;

 

select index_name,uniqueness from user_indexes;

 

alter table t disable primary key;

 

insert into t values('0','kkk');

insert into t values('0','kkk');

commit;

 

alter table t disable validate  primary key;

报错

 alter table enable novalidate primary key;

 

select constraint_name,status,validated from user_constraints;

insert into t values('0','kkk');--报错

 

set constraints all deferred;

insert into t values('0','kkk'); --成功

commit ---报错

 

 

 4.alter table 表名 enable novalidate constraint 约束名

    alter table 表名 enable validate constraint 约束名

 

5.找出违反约束的数据并存入exceptions表中

  1.运行/rdbms/admin/utlexcept1.sql

 

2.SQL> create table t(id int,name varchar2(20));

表已创建。

SQL> alter table t add primary key(id) disable;

表已更改。

 

3.

SQL> insert into t values(1,'kkk');

已创建 1 行。

SQL> insert into t values(2,'kkk');

已创建 1 行。

SQL> insert into t values(2,'kkk');

已创建 1 行。

 

4.SQL> alter table t primary key enable validate;
alter table t primary key enable validate
              *
第 1 行出现错误:
ORA-01735: 无效的 ALTER TABLE 选项


SQL> alter table t enable validate primary key;
alter table t enable validate primary key
*
第 1 行出现错误:
ORA-02437: 无法验证 (SCOTT.SYS_C005774) - 违反主键

 

5.SQL> alter table t enable validate primary key exceptions into exceptions;
alter table t enable validate primary key exceptions into exceptions
*
第 1 行出现错误:
ORA-02437: 无法验证 (SCOTT.SYS_C005774) - 违反主键

 

6.SQL> select rowid,id,name from t where rowid in (select row_id from exceptions);


ROWID                      ID NAME
------------------ ---------- --------------------
AAANCpAAEAAAAJtAAB          2 kkk
AAANCpAAEAAAAJtAAC          2 kkk

 

7.update t set id = 3 where rowid = ' AAANCpAAEAAAAJtAAC'

 

8.SQL> alter table t enable validate primary key exceptions into exceptions;

 

6.数据字典

  DBA_CONSTRAINTS

  DBA_CONS_COLUMNS

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值