2016년 1월 21일 목요일

[oracle]delete시 제약조건위배 의 경우와 강제삭제

delete 문 실행시 삭제가 안되는경우

a 테이블의 기본키(primary key)가 외부 테이블에서 참조키로 제약조건이 설정되어있을때
a 테이블의 delete 문 수행시 ora-02292 :  무결성 제약조건 ~~~~ 에러가 발생되면서
삭제가 되지 않는다.

예)


create table A(
pt_id number primary key,
reference_id number,
constraint fk foreign key(reference_id)
references B

);

create table B(
ct_id number primary key,
ct_data varchar(1000) not null

);


select * from user_constraints where table_name = 'CHILDTABLE'; 


insert into B(ct_id,ct_data)
values(1,'data1');


insert into A(pt_id,reference_id)
values(1,1);


/*에러*/
delete from B; /*여기서 에러*/
delete from A;


/*역시 에러*/
drop table B; /*여기서 에러*/
delete from A;

드랍도 되지 않는다.

해결방법 1

순서를 바꾼다.

delete from A;
delete from B; 



delete from A;
drop table B;

해결방법 2

alter table B drop constraints fk cascade;

자식테이블의 해당 제약조건을 강제 삭제한다.


해결방법 3


truncate table 테이블명

테이블의 모든 행을 강제로 삭제한다. 단 복구 불가능


발생하는 문제라고 하긴 뭐하지만 그냥 정리해봤다.




댓글 없음:

댓글 쓰기

[lunux]리눅스 폴더별 용량 확인

리눅스 폴더별 용량 확인 조회 하고자 하는 디렉토리 리스트가있는 경로로 이동후 du -h --max-depth=1