DDL_ALTER,DROP
ALTER(바꾸다, 수정하다)
1. 제약조건(추가/삭제)
추가: ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건(컬럼명)
외부 키인 경우 REFERENCES 테이블명[컬럼명] 추가
삭제: 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.컬럼(추가/삭제/수정)
ALTER TABLE 테이블명 ADD(컬럼명 데이터타입 [DEFAULT '값']);
ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입; -> 데이터 타입 변경
ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT '값'; -> DAFAULT 값 변경
ALTER TABLE 테이블명 MODIFY 컬럼명 NULL/NOT NULL; -> NULL 여부 결정
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 주의사항
DDL은 COMMIT, ROLLBACK되지 않는다 -> ALTER,DROP를 신중하게 진행
DDL 과 DML 구문을 섞어서 수행하면 안됨!
DDL 수행중에 DML 수행을 하면 DML이 COMMIT를 수행하지 않아도 자동으로 COMMIT!