>>으나 님께서 쓰시길<<
:: a table의 기본키인 aa필드를..
:: b table의 bb필드가 참조하고,
:: b table의 cc필드를 기본키로 지정하면
::
:: b table에 bb, cc를 복합기본키로 지정하였을때 처럼..
:: b table에.. bb또는 cc필드값이 중복되지 않을 경우
:: 데이타 insert가 가능 하듯이..
::
:: 위의 경우에도 그런가여??
테이블 a b
-----------
컬럼1 aa cc
컬럼1 dd bb aa foreign key
dd
라고하면
create table a (aa varchar2(1) primary key, dd varchar2(10));
insert into a values('1','11');
insert into a values('2','11');
create table b (cc varchar2(1) primary key, bb varchar2(1), dd varchar2(10),
CONSTRAINT "fk_b" FOREIGN KEY (bb) REFERENCES a (aa) ON DELETE CASCADE);
insert into b values('1','1','11');
1 개의 행이 만들어졌습니다.
insert into b values('2','1','11');
1 개의 행이 만들어졌습니다.
insert into b values('1','2','11');
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.SYS_C001276)에 위배됩니다
drop table b;
create table b (cc varchar2(1), bb varchar2(1), dd varchar2(10),
CONSTRAINT "pk_b" PRIMARY KEY (cc,bb)
);
insert into b values('1','1','11');
1 개의 행이 만들어졌습니다.
insert into b values('2','1','11');
1 개의 행이 만들어졌습니다.
insert into b values('1','2','11');
1 개의 행이 만들어졌습니다.
insert into b values('1','2','11');
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.pk_b)에 위배됩니다
drop table b;
create table b (cc varchar2(1), bb varchar2(1), dd varchar2(10),
CONSTRAINT "pk_b" PRIMARY KEY (cc,bb),
CONSTRAINT "fk_b" FOREIGN KEY (bb) REFERENCES a (aa) ON DELETE CASCADE
);
insert into b values('1','1','11');
1 개의 행이 만들어졌습니다.
insert into b values('2','1','11');
1 개의 행이 만들어졌습니다.
insert into b values('1','2','11');
1 개의 행이 만들어졌습니다.
insert into b values('1','2','11');
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.pk_b)에 위배됩니다
위예 에서 처럼 포린키는 참조만 하는 제약조건이고
기본키와는 별개입니다.(결국 복합기본키와도 별개죠)
|