728x90
728x90

테이블은 PK, FK등으로 연결이 되어 있는 경우가 많다.
예를들어 사원테이블(EMPNO(PK),DEPTNO(FK))가 있고 부서테이블(DEPTNO(PK),DEPTNM)이 있을 경우
사원테이블의 DEPTNO 부서코드에 추가하려는 내용이 부서테이블에 존재하지 않을 경우 위와 같은 오류가 발생한다

정확히 확인하기 어려울 때는 
ALL_CONSTRAINTS에 %s에 해당하는 내용을 CONSTRAINT_NAME에 WHERE절로 조건을 검색하면 부모키가 없습니다에 해당하는 TABLE을 찾을 수 있다.
TABLE에 추가하려는 키가 존재하는지 여부를 확인해주면 된다

728x90
728x90
728x90

- CONSTRAINT 

테이블의 COLUMN에 설정을 해주는 값들이며 데이터 관리를 효율적으로 하기 위한 제약조건으로 보면 된다

 

- NOT NULL

문자형의 NULL 값인 ''을 넣으면 ERROR가 발생한다

 

- PRIMARY KEY

PKCOL PRIMARY KEY라고 해도 알아서 PK테이블이 만들어진다

즉, 그냥 DROP만 해주면 안된다는 의미는 그냥 TABLE만 DROP하는 것이 아닌 제약조건도 DROP 해줘야 한다는 의미이다 

맨 하단에 보면 CONSTRAINT PK명칭 하고 () 괄호 안에 컬럼이름을 넣어주면 된다

그냥 테이블을 만들고 아래의 ALTER TABLE 이하처럼 만들어주면 된다

여기서 만들어지지 않을 경우 ALL_CONSTRAINTS 테이블과 USER_INDEXES에서도 확인해주면 된다

그러면 이미 있다는 뜻이니까,,

위에 DROP CASCADE CONSTRAINTS 와 더불어 PRIAMRY KEY를 없애는 방법이다

 

- UNIQUE

컬럼명 자료형 UNIQUE KEY 해줘도 선언이 된다

 

- FOREIGN KEY

다른 테이블의 PK나 UK를 FK키로 해서 사용하는 방법이다

대부분 JOIN을 위해 사용된다

예를들면 사원 테이블이 있고 부서 테이블이 존재한다면

사원의 정보에 부서내역이 존재해야 하니 부서의 PK 값을 가져와 JOIN 시켜줘서 한번에 SELECT를 해주는 것이다

EMP : EMPNO, EMPNAME, DEPTNO(FK)

DEPT : DEPTNO(PK), DEPTNAME

이런식으로 생각해주면 된다

 

- CHECK

CHECK 제약조건에 걸린대로 내용에 맞춰서 컬럼에 INSERT를 해줘야하며 그 외 값은 INSERT시 에러가 난다

728x90

+ Recent posts