Presentation is loading. Please wait.

Presentation is loading. Please wait.

13장 무결성 제약조건.

Similar presentations


Presentation on theme: "13장 무결성 제약조건."— Presentation transcript:

1 13장 무결성 제약조건

2 목 차 무결성 제약조건의 개념 기본키 제약조건 외래키 제약조건과 참조 무결성 unique 제약조건 Check 제약조건
컬럼레벨 제약조건 지정 제약조건 확인 제약조건명으로 제약조건 지정 테이블레벨 제약조건 지정 제약조건 변경 외래키 제약조건과 참조 무결성 unique 제약조건 Check 제약조건 Not null 제약조건 제약조건의 비활성화

3 무결성 제약 조건 데이터 무결성 기본키는 null 값을 가지지 않는다.
부서번호(deptno)는 유일한 값을 가져야 하고 null 값은 안됨.

4 무결성 제약 조건 무결성 제약 조건 역할 NOT NULL NULL을 허용하지 않는다 UNIQUE
해당 컬럼 값은 항상 유일해야 한다. PRIMARY KEY - 값이 반드시 존재해야 하고 유일해야 한다 - NOT NULL 과 UNIQUE 조건을 결합 FOREIGN KEY 참조되는 테이블의 PK컬럼에 하나 이상과 일치또는 null 값을 가지는 조건 CHECK 저장 가능한 데이터 값의 범위나 조건 지정

5 접속 SQL>conn scott_y/tiger
기본 키 제약 조건/컬럼 레벨 정의 방법 컬럼 레벨 정의 방법 접속 SQL>conn scott_y/tiger SQL>DROP TABLE dept01; SQL>CREATE TABLE dept01        (deptno   NUMBER(2) ,           dname   VARCHAR2(15),         loc      VARCHAR2(15)); SQL> INSERT INTO dept01 VALUES(1, ’A’, ’AA’); VALUES(1, ’B’, ’BB’); VALUES(null, ’C’, ’CC’); SQL> select * from dept01; Deptno 에 같은 번호 추가 가능 Deptno 에 null 값 추가 가능

6 기본 키 제약 조건/컬럼 레벨 정의 방법 컬럼 레벨 정의 방법 SQL>CREATE TABLE dept02
       (deptno   NUMBER(2)   PRIMARY KEY,         dname   VARCHAR2(15),         loc      VARCHAR2(15)); SQL> INSERT INTO dept02 VALUES(1, ’A’, ’AA’); VALUES(1, ’B’, ’BB’); VALUES(null, ’C’, ’CC’); SQL> select * from dept02; 컬럼명 데이터형 제약조건 PK(기본키) 지정 컬럼에 중복 값 오류 PK(기본키) 지정 컬럼에 null 값 오류 PRIMARY KEY = NOT NULL + UNIQUE

7 user_constraints 데이터 딕셔너리
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건 확인 user_constraints 데이터 딕셔너리 owner 제약 조건을 소유한 사용자명 constraint_name 제약 조건 명 constraint_type 제약 조건 유형 - P, R, U, C 4가지 constraint_type 의미 P PRIMARY KEY R FOREIGN KEY U UNIQUE C CHECK, NOT NULL

8 제약 조건 확인 SQL> DESC dept02; SQL> DESC user_constraints; 사용자명
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건 확인 SQL> DESC dept02; SQL> DESC user_constraints;        사용자명 제약조건명 제약조건 타입 테이블명 Check 검색조건 외래키의 경우 참조하는 PK

9 user_constraints 데이터 딕셔너리
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건 확인 user_constraints 데이터 딕셔너리 SQL>SELECT constraint_name, constraint_type, table_name FROM user_constraints; SYS_CXXXXXX : 제약조건명을 지정하지 않았을 경우 오라클이 자동으로 지정 CREATE TABLE dept02 (deptno   NUMBER(2)   PRIMARY KEY);

10 제약 조건명 지정하기 컬럼 레벨 정의 방법 조건명 SYS_CXXXXX
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건명 지정하기 컬럼 레벨 정의 방법 조건명 SYS_CXXXXX 컬럼명 데이터형 CONSTRAINT 제약조건명 제약조건형태 제약조건명 : dept03_deptno_pk [테이블명]_[컬럼명]_[제약조건유형] SQL>CREATE TABLE dept03 ( deptno   NUMBER(2)      CONSTRAINT dept03_deptno_pk  PRIMARY KEY dname   VARCHAR2(15) ); SQL>SELECT table_name, constraint_name FROM user_constraints WHERE table_name=‘DEPT03’;

11 제약 조건명 명명 규칙 [테이블명]_[컬럼명]_[제약조건유형] CREATE TABLE dept03
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건명 명명 규칙 [테이블명]_[컬럼명]_[제약조건유형] CREATE TABLE dept03 ( deptno   NUMBER(2)      CONSTRAINT dept03_deptno_pk  PRIMARY KEY ); [테이블명]_[컬럼명]_[제약조건유형]

12 테이블 레벨 정의 방법 CREATE TABLE table_name ( column_name1 datatype1,
  . . . column_nameN  datatypeN, CONSTRAINT constraint_name constraint_type ( column_name ) ) ; 마지막 컬럼 정의 다음에 컴마(,) 하고 테이블레벨 정의 어느 컬럼의 제약조건인지 괄호안에 컬럼명 명시

13 테이블 레벨 정의 방법 –cont’d SQL>CREATE TABLE dept04 (deptno NUMBER(2),
        dname   VARCHAR2(15),         loc      VARCHAR2(15),      CONSTRAINT dept04_deptno_pk  PRIMARY KEY ( deptno ));

14 컬럼 레벨과 테이블 레벨 비교 조건명 기술하지 않은 경우 컬럼 레벨 deptno NUMBER(2) PRIMARY KEY
deptno NUMBER(2), PRIMARY KEY(deptno) 조건명 기술하는 경우 컬럼 레벨 deptno NUMBER(2) CONSTRAINT dept_deptno_pk PRIMARY KEY 테이블레벨 deptno NUMBER(2), CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno)

15 기본키를 복합키로 지정하기 SQL>CREATE TABLE dept06 ( deptno NUMBER(2),
    dname   VARCHAR2(15),     loc      VARCHAR2(15),    CONSTRAINT dept06_deptno_pk PRIMARY KEY(deptno, dname)); SQL> DESC user_cons_columns SQL> col column_name format a20 SQL> col constraint_name format a20 SQL> SELECT table_name, column_name, constraint_name FROM user_cons_columns; 제약조건뷰의 구조 검색

16 제약 조건 변경하기 테이블에 새로운 제약조건 추가 ALTER TABLE table_name 테이블에서 제약조건 삭제
ADD CONSTRAINT constraint_name constraint_type (column_name); 테이블에서 제약조건 삭제 ALTER TABLE  table_name DROP CONSTRAINT constraint_name;

17 제약 조건 변경하기 SQL>CREATE TABLE dept05 ( deptno NUMBER(2),
SQL> ALTER TABLE  dept05 ADD CONSTRAINT dept05_deptno_pk PRIMARY KEY(deptno)); SQL> SELECT constraint_name, table_name FROM user_constraints; SQL>CREATE TABLE dept05   ( deptno   NUMBER(2),       dname   VARCHAR2(15),     loc      VARCHAR2(15));    DROP CONSTRAINT dept05_deptno_pk ; > Drop table dept05; PK 제약조건 추가 PK 제약조건 삭제

18 부서테이블에 있는 부서만이 사원테이블에 존재해야함
외래 키 제약 조건/참조 무결성 해당 회사에는 4개의 부서가 존재(부서테이블) 부서테이블에 있는 부서만이 사원테이블에 존재해야함 참조의 무결성 외래키 기본키 사원(emp) 테이블이 부서(dept) 테이블을 참조하는 종속관계가 설정

19 부모, 자식 테이블/기본키, 외래키 주종 관계에 있는 테이블에 대해서 부모 테이블의 기본키(Primary Key)가 자식 테이블의 외래 키(Foreign Key)가 된다. 기본키(Primary Key)와 외래 키(Foreign Key)설정에 의해서 주종관계가 성립되며 참조 무결성이 성립된다.

20 기본키/외래키 부서(dept) 테이블 사원(emp) 테이블 소 속 사원 테이블이 부서 테이블을 참조하는 종속관계 성립
사원은 회사 내에 존재하는 부서에 소속되어 있어야 한다. 부서(dept) 테이블 사원(emp) 테이블 소 속 부모 부서번호 : 기본키 자식 부서번호 : 외래키 사원 테이블이 부서 테이블을 참조하는 종속관계 성립 부서 테이블이 부모, 사원 테이블이 자식 테이블 소속 관계에서 참조 무결성은 부서번호(deptno) 컬럼에 의해서 설정 부서 테이블의 부서번호 (deptno) 컬럼은 기본키(부모키), 사원 테이블의 부서번호 (deptno) 컬럼은 외래키

21 참조 무결성 제약 조건 (DEPTNO) 컬럼이 부모 키가 되려면 기본 키/ UNIQUE 제약 조건이 지정되어 있어야 함
사원 테이블의 부서 번호 컬럼은 부서 테이블의 부서 번호 컬럼 값을 참조 없는 부서 번호가 입력되면 에러

22 참조 무결성 제약 조건 사원 테이블의 부서 번호는 부서 테이블의 부서 번호 중의 하나이거나 NULL만 가능
참조 무결성 제약 조건 : FOREIGN KEY

23 참조 무결성 제약 조건 - cont’d SQL> SELECT * FROM dept;
SQL> INSERT INTO emp(empid, empname, deptid) VALUES(8000, ‘SYJ’, 50); SQL> SELECT table_name, constraint_type, constraint_name, r_ constraint_name FROM user_constraints WHERE table_name IN (‘DEPT’, ‘EMP’); 오류 : 무결성 제약조건위배 FK인 경우 참조하는 제약조건명(PK)

24 오라클에서 제공하는 테이블의 제약 조건 FK인 경우 참조하는 테이블의 PK

25 참조 무결성 제약 조건 지정하기 1. deptno 컬럼을 기본 키로 하는 부서테이블 먼저 생성
CREATE TABLE dept07 ( deptno   NUMBER(2), dname   VARCHAR2(15), loc      VARCHAR2(15), CONSTRAINT dept07_deptno_pk PRIMARY KEY(deptno)); (부모) 2. dept07 (deptno) 컬럼을 참조하는 외래 키를 갖는 사원테이블 생성 (자식) CREATE TABLE emp07 ( empno   NUMBER(4) PRIMARY KEY, deptno  NUMBER(2) REFERENCES dept07 (deptno));

26 참조 무결성 제약 조건 - cont’d SQL>CREATE TABLE dept07 ( deptno NUMBER(2),
    dname   VARCHAR2(15),     loc      VARCHAR2(15),    CONSTRAINT dept07_deptno_pk PRIMARY KEY(deptno)); SQL>CREATE TABLE emp07   (empno   NUMBER(4) PRIMARY KEY,       ename   VARCHAR2(15),     deptno NUMBER(2)     REFERENCES dept07(deptno)); SQL> SELECT table_name, constraint_type, constraint_name, r_ constraint_name FROM user_constraints WHERE table_name IN (‘DEPT07’, ‘EMP07’); 컬럼레벨 외래키 지정

27 제약 조건명 지정하기 컬럼 레벨 정의 방법 조건명 SYS_XXXXX CREATE TABLE emp07
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건명 지정하기 컬럼 레벨 정의 방법 조건명 SYS_XXXXX CREATE TABLE emp07 ( empno   NUMBER(4) CONSTRAINT  emp07_empno_pk PRIMARY KEY, ename   VARCHAR2(15), deptno   NUMBER(2)    CONSTRAINT emp07_deptno_fk REFERENCES dept07 (deptno));

28 참조 무결성 제약 조건 - cont’d SQL>DROP TABLE emp07 ;
SQL>CREATE TABLE emp07   ( empno   NUMBER(4) constraint emp07_empno_pk PRIMARY KEY,       ename   VARCHAR2(15),     deptno NUMBER(2)     constraint emp07_deptno_fk REFERENCES dept07(deptno)); SQL> SELECT table_name, constraint_type, constraint_name, r_constraint_name FROM user_constraints WHERE table_name IN (‘DEPT07’, ‘EMP07’); 컬럼레벨 기본키 지정 컬럼레벨 외래키 지정

29 제약 조건명 지정하기 테이블 레벨 정의 방법 CREATE TABLE emp07 ( empno NUMBER(4),
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약 조건명 지정하기 테이블 레벨 정의 방법 CREATE TABLE emp07 ( empno   NUMBER(4), ename   VARCHAR2(15), deptno  NUMBER(2), CONSTRAINT emp07_empno_pk PRIMARY KEY(empno), CONSTRAINT emp07_deptno_fk FOREIGN KEY(deptno) REFERENCES dept07(deptno));

30 참조 무결성 제약 조건 - cont’d SQL>DROP TABLE emp07 ;
SQL>CREATE TABLE emp07   (empno   NUMBER(4),       ename   VARCHAR2(15),     deptno NUMBER(2),     constraint emp07_empno_pk PRIMARY KEY(empno), constraint emp07_deptno_fk FOREIGN KEY(deptno) REFERENCES dept07(deptno)); SQL> SELECT table_name, constraint_type, constraint_name, r_constraint_name FROM user_constraints WHERE table_name IN (‘DEPT07’, ‘EMP07’); 테이블레벨 기본키, 외래키 지정

31 Unique 제약조건 UNIQUE : 컬럼의 모든 값이 유일 SQL> CREATE TABLE dept08
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. Unique 제약조건 UNIQUE : 컬럼의 모든 값이 유일 SQL> CREATE TABLE dept08 ( deptno  NUMBER  PRIMARY KEY,   dname   VARCHAR2(15)  UNIQUE,   loc     VARCHAR2(15)); SQL> SELECT table_name, constraint_type, constraint_name, FROM user_constraints WHERE table_name = ‘DEPT08’;

32 Unique 제약조건명 지정하기 SQL> DROP TABLE dept08;
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. Unique 제약조건명 지정하기 SQL> DROP TABLE dept08; SQL> CREATE TABLE dept08 (deptno NUMBER CONSTRAINT dept08_deptno_pk PRIMARY KEY,   dname VARCHAR2(15) CONSTRAINT dept08_dname_uq UNIQUE,   loc VARCHAR2(15),     CONSTRAINT dept08_loc_uq UNIQUE(loc)); SQL> SELECT table_name, constraint_type, constraint_name, FROM user_constraints WHERE table_name = ‘DEPT08’;

33 기존 테이블에 Unique 지정하기 SQL>ALTER TABLE dept07
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 기존 테이블에 Unique 지정하기 SQL>ALTER TABLE dept07 ADD CONSTRAINT dept07_dname_uq UNIQUE(dname); SQL> SELECT table_name, constraint_type, constraint_name, FROM user_constraints WHERE table_name = ‘DEPT07’; SQL>INSERT INTO dept07 VALUES (1, ‘A’, ‘AA’); VALUES (2, ‘A’, ‘AA’); VALUES (2, NULL, ‘AA’); VALUES (3, NULL, ‘AA’); SQL> SELECT * FROM dept07; PK 만 지정한 상태 Unique 으로 지정된 부서명에 동일 이름 입력시 오류 NULL 값은 상관없음

34 CHECK 제약조건 SQL>CREATE TABLE emp08
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. CHECK 제약조건 입력 데이터가 조건에 맞는지 검사하여 입력되도록 함. SQL>CREATE TABLE emp08 (empno  number(4) constraint  emp08_empno_pk primary key, ename   VARCHAR2(15), sal     NUMBER(7, 2) Constraint emp08_sal_ck CHECK(sal BETWEEN 500 AND 5000), deptno  NUMBER(2) CONSTRAINT emp08_deptno_fk REFERENCES dept08 (deptno));  SQL> SELECT table_name, constraint_type, constraint_name, search_condition FROM user_constraints WHERE table_name = ‘EMP08’;   

35 NOT NULL 제약조건 SQL> CREATE TABLE dept09
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. NOT NULL 제약조건 컬럼에 NULL 값을 허용하지 않음 SQL> CREATE TABLE dept09 (deptno   number(4) constraint  dept09_deptno_pk PRIMARY KEY, dname  VARCHAR2(15)   constraint  dept09_dname_nn NOT NULL, loc     VARCHAR2(15)); SQL> SELECT table_name, constraint_type, constraint_name, search_condition FROM user_constraints WHERE table_name = ‘DEPT09’; SQL>ALTER TABLE dept09 MODIFY loc CONSTRAINT dept09_loc_nn NOT NULL; Not NULL은 alter table ~ modify 구문으로 추가 됨

36 NOT NULL 제약조건 SQL>ALTER TABLE dept09
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. NOT NULL 제약조건 Not NULL제약조건 추가는 modify 사용 (add constraint 가 아님) SQL>ALTER TABLE dept09 MODIFY loc CONSTRAINT dept09_loc_nn NOT NULL; SQL> SELECT table_name, constraint_type, constraint_name, search_condition FROM user_constraints WHERE table_name = ‘DEPT09’; SQL>ALTER TABLE dept09 DROP CONSTRAINT dept09_loc_nn; SQL>ALTER TABLE dept09 ADD CONSTRAINT dept09_loc_nn NOT NULL; 오류 : Not null 은 add 로 추가못함

37 제약조건의 비활성화 자식테이블이 부모테이블을 참조하는 경우
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약조건의 비활성화 자식테이블이 부모테이블을 참조하는 경우 참조되는(부모)컬럼의 삭제, 테이블 제거, 기본키 제약조건 제거는 불가 사원테이블이 참조시 부서번호 컬럼 삭제 불가 DROP TABLE DEPT 불가 DROP CONSTRAINT Dept_deptno_pk 불가 제약 조건을 삭제할 때 CASCADE 옵션을 지정하면 제거됨 user_constraints 데이터 딕셔너리에서 부모키와 외래키 삭제 확인

38 제약조건의 비활성화 SQL> CREATE TABLE dept10
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약조건의 비활성화 부모테이블 생성 SQL> CREATE TABLE dept10 (deptno   number(4) constraint  dept10_deptno_pk PRIMARY KEY, dname  VARCHAR2(15), loc     VARCHAR2(15)); SQL>CREATE TABLE emp10 (empno  number(4), ename   VARCHAR2(15), deptno    NUMBER(4), constraint  emp10_empno_pk primary key(empno), constraint emp10_deptno_fk FOREIGN KEY(deptno) REFERENCES dept10 (deptno));  자식테이블 생성

39 제약조건의 비활성화 SQL>INSERT INTO dept10 VALUES (1, ‘A’, ‘AA’);
VALUES (2, ‘B’, ‘BB’); SQL>INSERT INTO emp10 VALUES (1111, ‘EA’, 1); VALUES (2222, ‘EB’, 2); VALUES (3333, ‘EC’, 3); SQL>DELETE dept10 WHERE deptno=1; SQL> SELECT table_name, constraint_type, constraint_name, search_condition FROM user_constraints WHERE table_name IN( ‘DEPT10’, ‘EMP10’); SQL> DROP TABLE dept10; 무결성 제약조건 위배-부모키 없음 무결성 제약조건 위배-자식레코드 발견 오류 : 무결성 제약조건 위배

40 Cascade 옵션 : 참조하는 제약조건이 있으면 그것과 함께 무조건 삭제
제약조건의 비활성화 SQL> ALTER TABLE dept10 DROP CONSTRAINT dept10_deptno_pk; 참조하는 제약조건을 무조건 삭제함 DROP CONSTRAINT dept10_deptno_pk CASCADE; SQL> SELECT table_name, constraint_type, constraint_name, FROM user_constraints WHERE table_name IN ( ‘DEPT10’, ‘EMP10’); SQL>DELETE dept10 WHERE deptno=1; SQL>SELECT * FROM dept10; SQL>SELECT * FROM emp10; 오류 : 외부키에 의해 참조됨 Cascade 옵션 : 참조하는 제약조건이 있으면 그것과 함께 무조건 삭제 외래키가 삭제되었으므로 삭제됨

41 제약조건의 비활성화 제약 조건을 삭제하지 않고 활성화하지 않도록 DISABLE 사용.
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약조건의 비활성화 제약 조건을 삭제하지 않고 활성화하지 않도록 DISABLE 사용. ALTER TABLE emp10 DISABLE CONSTRAINT emp10_empno_pk; 비 활성화된 제약 조건을 다시 살리려면 ENABLE 사용. ALTER TABLE emp10 ENABLE CONSTRAINT emp10_empno_pk;

42 Emp10(deptno) FK 에 의해 참조되더라도 그 것과 함께 무조건 비 활성화
자료 사전 user_constraints에서 중요한 컬럼 몇 개만 살펴보겠습니다. owner는 제약 조건을 소유한 사용자명을 저장하는 컬럼입니다. constraint_name은 제약 조건 명을 constraint_type는 제약 조건 유형을 저장하는 컬럼입니다. constraint_type은 P, R, U, C 4가지 값 중에 하나를 갖습니다. 제약조건의 비활성화 외래 키로 참조하는 부모키의 제약 비활성화하려면 CASCADE 옵션이 사용됨. 다른테이블에서 참조되는 기본키를 비활성화하려면 disable~~~~ cascade를 꼭 사용해야 함 ALTER TABLE dept10 DISABLE CONSTRAINT dept10_deptno_pk CASCADE; Emp10(deptno) FK 에 의해 참조되더라도 그 것과 함께 무조건 비 활성화


Download ppt "13장 무결성 제약조건."

Similar presentations


Ads by Google