목차
- ALTER
1-1. 컬럼 추가/삭제/변경
1-2. DEFAULT값 지정 및 변경
1-3. 제약조건 추가/삭제/변경
1-4. 컬럼의 자료형 변경
1-5. 컬럼명 변경
1-6. 제약조건명 변경
1-7. 테이블명 변경 - DROP
학습점검
✅ ALTER 구문을 이용하여 정의된 테이블의 구조를 변경할 수 있다.
✅ ALTER 구문을 이용하여 제약조건 설정을 추가하거나 변경할 수 있다.
✅ DROP 구문을 이용하여 테이블을 삭제할 수 있다.
❗ CREATE-ALTER-DROP은 데이터 정의 언어(DDL, Data Definition Language)로서 구조적으로 객체를 생성하고, 수정하고, 삭제하는 기능을 한다.
1. ALTER
- 객체를 수정하는 구문이다.
- 즉 테이블에 정의된 내용을 수정할 때 사용되는 데이터 정의어이다.
- ① 컬럼 추가/삭제/변경, ② DEFAULT값 지정 및 변경, ③ 제약조건 추가/삭제/변경, ④ 컬럼의 자료형 변경, ⑤ 컬럼명 변경, ⑥ 제약조건명 변경, ⑦ 테이블명 변경 등을 할 수 있다.
1-1. 컬럼 추가/삭제/변경
-- 컬럼 추가
✅ ALTER TABLE 테이블명 ADD (컬럼명 자료형(크기));
-- 컬럼 삭제 *작성법 둘 다 가능*
✅ ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
✅ ALTER TABLE 테이블명 DROP (컬럼명); -- (컬럼명, 컬럼명) 나열 가능
-- 컬럼 추가
ALTER TABLE EXAMPLE
ADD (NAME VARCHAR2(20));
테이블이 변경되었습니다.
- 이때 별도 값을 지정하지 않았으므로 NULL로 입력된다.
- DEFAULT 값 지정을 위해서는 자료형(크기) 뒤로 DEFAULT 리터럴값; 지정하면 된다. 1-3번에서 따로 다루고 있다.
-- 컬럼 삭제
ALTER TABLE EXAMPLE
DROP COLUMN NAME;
ALTER TABLE EXAMPLE
DROP (ID, PWD); -- 컬럼명 나열 가능
- 컬럼에 데이터가 들어있어도 삭제된다.
- DROP한 컬럼은 복구 불가하다. DDL 언어는 AUTO COMMIT이기 때문이다.
- (컬럼명, 컬럼명) 나열해 쓸 수 있다. 여러 컬럼을 한 번에 삭제한다.
DROP COLUMN LASTONE;
테이블에 모든 열들을 삭제할 수 없습니다
- 모든 열을 삭제할 수는 없다. 테이블에 최소 한 개 이상의 컬럼은 남아있어야 한다.
- 마지막 남은 컬럼을 삭제하려 하면 위처럼 오류 메시지가 나타난다.
DROP COLUMN PK;
부모 키 열을 삭제할 수 없습니다
- 삭제하고자 하는 컬럼을 참조하고 있는 다른 컬럼이 있다면, 삭제를 진행하지 못한다.
DROP COLUMN PK CASCADE CONSTRAINTS; -- S 붙여 쓴다
- 제약 조건도 함께 삭제할 것을 명시하면 삭제가 진행된다.
- 이때 키워드는 S를 붙여 CONSTRAINTS라고 작성한다.
1-2. DEFAULT값 지정 및 변경
-- 컬럼 생성 시 DEFAULT값 지정
✅ ALTER TABLE 테이블명 ADD (컬럼명 자료형(크기) DEFAULT 리터럴값);
-- DEFAULT값 변경
✅ ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT 리터럴값;
-- 컬럼 생성 시 DEFAULT값 지정
ALTER TABLE EXAMPLE
ADD (COUNTRY VARCHAR2(20) DEFAULT '한국');
-- DEFAULT값 변경
ALTER TABLE EXAMPLE
MODIFY COUNTRY DEFAULT '미국';
- 처음 지정할 때는 ADD, 이후 변경할 때는 MODIFY 키워드를 쓴다는 차이가 있다.
- 이때 결과적으로 DEFAULT값 설정만 바뀌었을뿐, 테이블의 데이터가 변경되지는 않는다.
1-3. 제약조건 추가/삭제/변경
-- 서브쿼리를 이용한 CREATE TABLE
CREATE TABLE EXAMPLE
AS
SELECT
D.*
FROM DEPARTMENT D;
- 서브쿼리를 이용한 CREATE TABLE에서는 결과적으로 NOT NULL 제약 조건만을 복제한다.
-- 제약 조건 추가
✅ ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY (컬럼명);
✅ ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명) REFERENCES 테이블명 (컬럼명);
✅ ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 UNIQUE (컬럼명);
✅ ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 CHECK (컬럼명);
-- 제약 조건 추가(NOT NULL)
✅ ALTER TABLE 테이블명 MODIFY 컬럼명 CONSTRAINT 제약조건명 NOT NULL;
-- 제약 조건 삭제(1개)
✅ ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
-- 제약 조건 삭제(n개)
✅ ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명 DROP CONSTRAINT 제약조건명...;
-- 제약 조건 삭제(NOT NULL)
✅ ALTER TABLE 테이블명 MODIFY (컬럼명 NULL, 컬럼명 NULL);
-- 제약 조건 추가 ADD
ALTER TABLE EXAMPLE
ADD CONSTRAINT PK_DEPT_ID PRIMARY KEY (DEPT_ID);
ALTER TABLE EXAMPLE
ADD CONSTRAINT UQ_DEPT_TITLE UNIQUE (DEPT_TITLE);
-- 제약 조건 추가(NOT NULL) MODIFY
ALTER TABLE EXAMPLE
MODIFY DEPT_TITLE CONSTRAINT NN_DTITLE NOT NULL;
- NOT NULL만 작성법이 상이하다: MODIFY 키워드를 사용하고, MODIFY 컬럼명 CONSTRAINT 제약조건명 NOT NULL 순으로 쓰인다.
-- 제약 조건 삭제 DROP *여러 개 나열 가능*
ALTER TABLE EXAMPLE
DROP CONSTRAINT FK_DID
DROP CONSTRAINT FK_JID;
-- 제약 조건 삭제(NOT NULL) MODIFY
ALTER TABLE EXAMPLE
MODIFY (NAME NULL, NO NULL);
- NOT NULL 조건에 대해 삭제한다 함은 결국 해당 컬럼을 NULLABLE로 바꾸겠다는 의미이다. 따라서 (컬럼명 NULL)로 명시해야 한다.
1-4. 컬럼의 자료형 변경
-- 컬럼 자료형 수정
✅ ALTER TABLE 테이블명 MODIFY 컬럼명 자료형(크기);
-- 컬럼 자료형 수정
ALTER TABLE EXAMPLE
MODIFY DEPT_ID CHAR(3)
MODIFY DEPT_TITLE VARCAHR(30)
MODIFY LOCATION_ID VARCHAR2(2);
테이블이 변경되었습니다.
- 위처럼 MODIFY 키워드를 연속 나열해 쓸 수 있다.
ALTER TABLE EXAMPLEMODIFY DEPT_TITLE VARCHAR2(10);
일부 값이 너무 커서 열 길이를 줄일 수 없음
- 컬럼의 크기를 줄일 때 주의할 점이다. 변경 크기를 초과하는 값이 존재하면 위처럼 오류 메시지가 출력된다.
- 일례로 '해외영업1부'는 총 16 byte(한글 글자당 3 byte)에 해당하므로 예시에서 지정한 크기에 담길 수 없다.
- 따라서 컬럼 크기를 축소할 때는 변경 크기를 초과하는 값이 없어야 한다.
1-5. 컬럼명 변경
✅ ALTER TABLE 테이블명 RENAME COLUMN 현재컬럼명 TO 바꿀컬럼명;
ALTER TABLE EXAMPLE
RENAME COLUMN DEPT_ID TO DEPT_CODE;
- RENAME COLUMN 키워드를 사용하고, 현재컬럼명 TO 바꿀컬럼명 명시한다.
1-6. 제약조건명 변경
✅ ALTER TABLE 테이블명 RENAME CONSTRAINT 현재제약조건명 TO 바꿀제약조건명;
ALTER TABLE EXAMPLE
RENAME CONSTRAINT PK_DEPT_ID TO PK_DEPT_CODE;
- RENAME CONSTRAINT 키워드를 사용하고, 현재제약조건명 TO 바꿀제약조건명 명시한다.
1-7. 테이블명 변경
✅ ALTER TABLE 테이블명 RENAME TO 바꿀테이블명;
ALTER TABLE EXAMPLE
RENAME TO TEST;
- RENAME 키워드를 사용하고, TO 바꿀테이블명 명시한다.
- 변경 작업이 마쳐진 후에 이전테이블명을 조회하거든 테이블이 존재하지 않습니다 라는 오류 코드를 확인할 수 있다. RENAME 뒤에는 바뀐 테이블명으로 SELECT 할 수 있다.
2. DROP
-- 테이블 삭제
✅ DROP TABLE TEST CASCADE CONSTRAINTS;
- 테이블 삭제 시 제약조건명도 일괄 삭제되도록 한다.
- 그렇지 않으면 제약조건명만 남아 이름이 중복되는 경우들을 초래할 수 있다.
'Database' 카테고리의 다른 글
[Oracle/SQL] 10. VIEW | 인라인뷰 | DDL 활용한 베이스테이블 조작 (0) | 2022.01.27 |
---|---|
[Oracle/수업 과제 practice] DDL(1~9번 문항) (0) | 2022.01.26 |
[Oracle/SQL] 8. TCL | 트랜잭션 | COMMIT | ROLLBACK | SAVEPOINT (0) | 2022.01.25 |
[Oracle/SQL] 7. DML | INSERT | UPDATE | DELETE | MERGE (0) | 2022.01.25 |
[Oracle/SQL] 6. DDL | CREATE TABLE | COMMENT | CONSTRAINT (0) | 2022.01.24 |