티스토리 뷰

테이블 수정(alter table) - 테이블의 기존 컬럼에 제약 조건 추가


문법 1 . TABLE LEVEL 문법

제약 조건 : PK, FK, UK, CK

1
2
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 제약조건유형 ( 컬럼명 );
cs

1
2
3
4
ALTER TABLE emp2
ADD CONSTRAINT emp_mgr_fk
    FOREIGN KEY ( manager_id )
        REFERENCES emp2 ( employee_id );
cs


문법 2 . COLUMN LEVEL 문법

제약 조건 : PK, FK, UK, CK, NN

1
2
ALTER TABLE 테이블명
MODIFY 컬럼명 CONSTRAINT 제약조건명 제약조건유형;
cs


1
2
ALTER TABLE emp2
MODIFY employee_id CONSTRAINT emp_mgr_fk;
cs


1
DESC employees
cs



테이블에 선언된 제약조건 확인

1
DESC user_constraints
cs


컬럼 사이즈 줄이기

1
COL constraint_name FORMAT a15
cs


1
COL search_condition FORMAT a25
cs


1
COL r_constraint_name FORMAT a15
cs


1
2
3
4
5
6
SELECT constraint_name,
       constraint_type,
       search_condition,
       _constraint_name
FROM user_constraints
WHERE table_name = upper('&t_name');
cs


입력 : employees

upper 소문자 → 대문자 변경


버퍼 실행

1
l
cs


버퍼 저장

1
SAVE /home/oracle/search_cons.sql
cs


버퍼 실행

1
@/home/oracle/search_cons.sql
cs

입력 : departments


복사본 테이블 생성

1
2
3
4
CREATE TABLE emp2
    AS
        SELECT *
        FROM employees;
cs


* 의문점

테이블 구조, 테이블 내용은 그대로 복사되었는데 제약 조건은?


1
@/home/oracle/search_cons.sql
cs


입력 : emp2


똑같이 복사가 안 된다

NOT NULL 만 복사 됨

복사하는 방법은 없다

NOT NULL만 무조건 복사됨

나머지 제약조건은 직접 추가해야한다


제약 조건 추가

1
2
ALTER TABLE emp2
ADD CONSTRAINT e2_eid_pk PRIMARY KEY ( employee_id );
cs

잘 선언 되었는지 확인

1
@/home/oracle/search_cons.sql
cs

입력 : emp2


1
2
3
ALTER TABLE emp2
MODIFY department_id CONSTRAINT e2_did_fk
        REFERENCES departments (departement_id);
cs


1
@/home/oarcle/search_cons.sql
cs

입력 : emp2


1
2
3
4
ALTER TABLE emp2
ADD CONSTRAINT e2_mid_fk FOREIGN KEY (manager_id)
    REFERENCES    emp2       (employee_id);
                부모테이블      부모컬럼명
cs


1
@/home/oarcle/search_cons.sql
cs

입력 : emp2


공지사항
최근에 올라온 글
Total
Today
Yesterday