TODAY I LEARNED 0811

doyeon kim·2023년 8월 11일

DB

목록 보기
6/8

DDL_ALTER,DROP

ALTER(바꾸다, 수정하다)

  • 테이블에서 수정할 수 있는 것
  1. 제약 조건(수정X 삭제 후 추가만 가능)
  2. 컬럼(추가/수정/삭제 가능)
  3. 이름 변경(테이블명,제약조건명,컬럼명)

1. 제약조건(추가/삭제)

  1. 추가: ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건(컬럼명)
    외부 키인 경우 REFERENCES 테이블명[컬럼명] 추가

  2. 삭제: ALTER TABLE 테이블명 DROP CONSTRAINT [제약조건명]

    수정은 별도로 존재X -> 삭제 후 추가만 가능

------------------------------------- 예시------------------------------------

CREATE TABLE DEPT_COPY
AS SELECT * FROM DEPARTMENT;
( DEPARTMENT 테이블 복사(컬럼명, 데이터타입, NOT NULL 조건만 복사) )

ALTER TABLE DEPT_COPY
ADD CONSTRAINT DEPT_COPY_TITLE_U UNIQUE(DEPT_TITLE);
--UNIQUE 제약조건 TITLE에 추가

ALTER TABLE DEPT_COPY
DROP CONSTRAINT DEPT_COPY_TITLE_U;
-- DEPT_COPY_TITLE_U 이름의 제약조건명 삭제

-- DEPT_COPY 의 DEPT_TITLE 컬럼에 NOT NULL 제약조건 추가/삭제
ALTER TABLE DEPT_COPY
ADD NOT NULL(DEPT_TITLE)
--> 이렇게 하면 안됨
: NOT NULL 제약조건은 새로운 제약조건을 추가하는 것이
-- 아닌 컬럼 자체에 NULL 허용/비허용을 제어하는 형태

맞는 형태
ALTER TABLE DEPT_COPY
MODIFY DEPT_TITLE NOT NULL;



2.컬럼(추가/삭제/수정)

  1. 컬럼 추가

ALTER TABLE 테이블명 ADD(컬럼명 데이터타입 [DEFAULT '값']);

  1. 컬럼 수정

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

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

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

  1. 컬럼 삭제

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

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

컬럼 삭제시 주의사항
테이블은 최소 1개 이상의 컬럼이 존재해야 되기 때문에 모든 컬럼을 삭제할 수는 없다

-----------------------------------예시----------------------------------------
컬럼 추가
ALTER TABLE DEPT_COPY ADD(CNAME VARCHAR2(30));
SELECT * FROM DEPT_COPY;
ALTER TABLE DEPT_COPY ADD(LNAME VARCHAR2(20) DEFAULT '한국');
테이블에 문자열 타입 CNAME 과 LNAME 컬럼을 추가했는데 LNAME의 경우 기본값이 '한국' 이다

컬럼 수정
INSERT INTO DEPT_COPY
VALUES('D10','개발1팀','L1',DEFAULT,DEFAULT);
해당 테이블의 경우 DEPT_ID가 CHAR(2)로 선언되어 있어 3바이트(D10) 추가 불가 -> 수정

ALTER TABLE DEPT_COPY MODIFY DEPT_ID VARCHAR2(5);
DEPT_ID 컬럼의 데이터 타입을 수정후 INSERT 실행 -> 성공

ALTER TABLE DEPT_COPY MODIFY LNAME DEFAULT 'KOREA';
기본값을 변경해도 기존의 데이터는 변하지 않음! -> UPDATE 사용

UPDATE DEPT_COPY SET LNAME = DEFAULT WHERE LNAME = '한국';
LNAME이 한국인 컬럼의 값을 디폴트(KOREA) 값으로 변경

이름변경(컬럼, 제약조건, 테이블)

컬럼명 변경
ALTER TABLE DEPT_COPY RENAME COLUMN DEPT_TITLE TO DEPT_NAME;
DEPT_TITLE 컬럼명을 DEPT_NAME으로 변경

제약조건명 변경
ALTER TABLE DEPT_COPY RENAME CONSTRAINT D_COPY_PK TO DEPT_COPY_PK;

테이블명 변경
ALTER TABLE DEPT_COPY RENAME TO DCOPY;

테이블 삭제
관계가 없는 테이블(참조X) 삭제
DROP TABLE DCOPY;

DROP TABLE T1 CASCADE CONSTRAINTS;
삭제하려는 테이블과 연관된 제약 조건 모두 삭제


DDL 주의사항

  1. DDL은 COMMIT, ROLLBACK되지 않는다 -> ALTER,DROP를 신중하게 진행

  2. DDL 과 DML 구문을 섞어서 수행하면 안됨!
    DDL 수행중에 DML 수행을 하면 DML이 COMMIT를 수행하지 않아도 자동으로 COMMIT!

0개의 댓글