230811 TIL Chapter 24. DB DDL ALTER , DROP

최규연·2023년 8월 11일
0

TIL

목록 보기
26/57

DDL ALTER ( 수정 ) , DROP ( 삭제 )

ALTER
바꾸다, 수정하다, 변조하다의 뜻을 가진 ALTER은 테이블을 수정할 때 사용되고 수정 가능한 것 들은 다음과 같다.

  • 제약 조건 ( 추가 / 삭제 )
  • 컬럼 ( 추가 / 수정 / 삭제 )
  • 이름 변경 ( 테이블명 / 제약조건명 / 컬럼명 )

  1. 제약조건 ( 추가 / 삭제 )
[작성법]
1) 추가 : ALTER TABLE 테이블명
					ADD [CONSTRAINT 제약조건명] 제약조건 (컬럼명)
					[REFERENCES 테이블명 [(컬럼명)]] <-- FK인 경우 추가


2) 삭제 : ALTER TABLE 테이블명
 				DROP CONSTRAINT 제약조건명;

주의 !
NOT NULL 제약조건은 새로운 제약조건을 추가하는 것이 아닌 컬럼 자체에 NULL 허용/비허용을 제어하는 성질 변경의 형태로 인식됨.
MODIFY 구문을 사용해서 NULL을 제어 해야한다.


  1. 컬럼 ( 추가 / 수정 / 삭제 )
[ 작성법 ]
-- 컬럼 추가
-- ALTER TABLE 테이블명 ADD(컬럼명 테이터타입 [DEFAULT '값]);


-- 컬럼 수정
-- ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입; -> 데이터 타입 변경

-- ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT '값' -> DEFAULT 값 변경

-- ALTER TABLE 테이블명 MODIFY 컬럼명 NULL / NOT NULL; -> NULL 여부 변경



-- 컬럼 삭제
-- ALTER TABLE 테이블명 DROP(삭제할 컬럼명);
-- ALTER TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;

--> * 컬럼 삭제 시 주의 사항 *
--> 테이블이란? 행과 열로 이루어진 DB의 가장 기본 객체
-- 테이블은 최소 1개 이상의 컬럼이 존재해야 되기 때문에
-- 모든 컬럼을 다 삭제할 수는 없다!

  1. 이름변경 ( 컬럼 / 제약조건 / 테이블 )
-- EX

-- 1) 컬럼명 변경 (DEPT_TITLE -> DEPT_NAEM)
ALTER TABLE DEPT_COPY RENAME COLUMN DEPT_TITLE TO DEPT_NAME;

SELECT * FROM DEPT_COPY;


-- 2) 제약조건명 변경 (D_COPY_PK -> DEPT_COPY_PK)
ALTER TABLE DEPT_COPY RENAME CONSTRAINT D_COPY_PK TO DEPT_COPY_PK;


-- 3) 테이블명 변경 (DEPT_COPY -> DCOPY)
ALTER TABLE DEPT_COPY RENAME TO DCOPY;

SELECT * FROM DEPT_COPY; -- 오류남
SELECT * FROM DCOPY;

  1. 테이블 삭제
DROP TABLE 테이블명 [CASCADE CONSTRINTS];
-- 1) 관계가 형성되지 않은 테이블 삭제
DROP TABLE DCOPY;
-- 2) 관계가 형성된 테이블 삭제

CREATE TABLE TB1(
	TB1_PK NUMBER PRIMARY KEY,
	TB1_COL NUMBER
);

CREATE TABLE TB2(
	TB2_PK NUMBER PRIMARY KEY,
	TB2_COL NUMBER REFERENCES TB1
);

-- TB1에 샘플 데이터 삽입
INSERT INTO TB1 VALUES(1, 100);
INSERT INTO TB1 VALUES(2, 200);
INSERT INTO TB1 VALUES(3, 300);

COMMIT;


-- TB2에 샘플 데이터 삽입
INSERT INTO TB2 VALUES(11, 1);
INSERT INTO TB2 VALUES(22, 2);
INSERT INTO TB2 VALUES(33, 3);


-- TB1 삭제
DROP TABLE TB1;
-- ORA-02449: 외래 키에 의해 참조되는 고유/기본 키가 테이블에 있습니다
--> 해결방법
-- 1) 자식, 부모 테이블 순서로 삭제
-- 2) ALTER 를 이용해서 FK 제약조건을 삭제 후 TB1 삭제
-- 3) DROP TABLE 삭제옵션 CASCADE CONSTRAINTS 사용
		--> 삭제하려는 테이블과 연결된 FK 제약조건을 모두 삭제

DROP TABLE TB1 CASCADE CONSTRAINTS;
--> 삭제 성공

DDL 주의사항

  1. DDL은 COMMIT / ROLLBACK 이 되지 않는다.
    --> ALTER, DROP을 신중하게 진행해야함.

  2. DDL과 DML 구문을 섞어서 수행하면 안된다!
    --> DDL 수행중 DML 수행을 하면 DML이 COMMIT을 수행하지 않아도, 자동 COMMIT!

0개의 댓글