감사한 분들
https://ypangtrouble.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EC%9D%98%EC%96%B4%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%88%98%EC%A0%95-CREATE-DROP-MODIFY-RENAME
https://extbrain.tistory.com/39
https://trustall.tistory.com/8
https://jwklife.tistory.com/5
https://gent.tistory.com/323
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=idjoopal&logNo=221559099309
https://code-nen.tistory.com/39
https://sgcomputer.tistory.com/250
https://ggujunheee.tistory.com/17
DDL 이란?
- 데이터베이스 스키마를 정의하거나 조작하기 위한 언어
- 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할
- DDL은 명령어를 입력하는 순간 작업이 즉시 완료(AUTO COMMIT)되기 때문에 주의해야 합니다.
ROLLBACK을 통해 만회할 수 없습니다.
DDL 대상 | 스키마 / 도메인 / 테이블 / 뷰 / 인덱스 |
---|
DDL 종류 : CREATE / ALTER / DROP / RENAME / COMMNET / TRUNCATE
CREATE |
---|
자료형 정의 |
열 구조와 테이블 복사(전체 복사) |
열 구조와 일부 데이터만 복사 |
열 구조만 복사 |
기본 구조 : CREATE TABLE 테이블 명 (+ 서브 쿼리)
CREATE TABLE TMP_TBSL
AS (SELECT * FROM TMP_TMP_TBSL);
기존 테이블과 같은 열 구조로 테이블을 만들고 싶으면 CREATE 문에 서브 쿼리를 사용하면 됩니다.
AS 키워드를 사용하여 생성하면 서브 쿼리에 명시한 테이블과 같은 열 구조를 가지며, WHERE 절을 붙이지 않으면 데이터까지 모두 복사하여 테이블을 생성합니다.
CREATE TABLE TMP_TBSL
AS (SELECT * FROM TMP_TMP_TBSL)
WHERE STNO = 30;
기존 테이블과 같은 열 구조로 테이블을 만들되, 일부 데이터만 복사하여 새 테이블을 생성합니다.
서브 쿼리에 WHERE절을 활용하여 저장될 데이터를 조건식으로 지정하면 됩니다.
CREATE TABLE TMP_TBSL
AS SELECT T.STNO, T.STNA, T.COM, D.DENO, D.DEPT
FROM TMP_TMP_TBSL T, DEPT D
WHERE 1 <> 1;
여기서 1 <> 1은 1 != 1입니다. 항상 false이기 때문에 모든 결과 행이 출력 대상에서 제외됩니다.
이런 식으로 컬럼 구성은 같지만 빈 테이블을 생성하고 싶을 때는 WHERE 절 조건식의 결과 값이 항상 FALSE가 나오는 방법을 사용할 수 있습니다.
ALTER |
---|
ADD - ALTER TABLE 테이블 명 ADD 추가할 컬럼 명 데이터형(데이터 크기) 컬럼 속성 |
RENAME - ALTER TABLE(원본 테이블) RENAME TO (원하는 테이블 명) |
MODIFY - ALTER TABLE 테이블 명 MODIFY(컬럼 명 데이터 타입(데이터 크기) |
DROP - ALTER TABLE DROP 테이블 명 DROP COLUMN 컬럼 명 |
테이블에 새로운 컬럼을 추가하고자 할 때 사용할 수 있습니다.
테이블 명 변경을 위해 RENAME을 하기도 하지만, 테이블 백업을 위해 바꾸는 경우도 있습니다
이 경우, 테이블 명, 앞뒤로 TMP(임시) / BAK(백업)을 붙여 테이블의 용도를 나타냅니다.
테이블 명만 바꾸는 것이기 때문에 인덱스 및 데이터는 변경되지 않습니다.
기본 값 지정
ALTER TABLE (테이블명) MODIFY (컬럼명) VARCHAR2(5) DEFAULT '1000';
NOT NULL 지정
ALTER TABLE (테이블명) MODIFY (컬럼명) VARCHAR2(5) NOT NULL;
NOT NULL 제거(변경)
ALTER TABLE (테이블명) MODIFY (컬럼명) VARCHAR2(5) NULL;
기본 값 + NOT NULL 지정
ALTER TABLE (테이블명) MODIFY (컬럼명) VARCHAR2(5) DEFAULT '1000' NOT NULL;
TRUNCATE
DELETE
DROP
참고)
제약 조건 유형
주 키(Primary Key)
외래 키(Foreign Key)
예를 들어, 같은 ID 값을 공유해야 하는 A 테이블(부모)와 B 테이블(자식)이 있다고 가정하고,
참조 테이블로 A 테이블의 ID 컬럼을 참조하면 둘의 부모 자식 관계가 생깁니다.
주의점
외래 키로 묶인 부모 테이블의 컬럼 또는 값은 마음대로 삭제할 수 없습니다.
보통은 ON DELETE CASCADE를 통해 참조되는 부모 테이블의 행에 대한 DELETE를 허용합니다.
즉, 참조되는 부모 테이블 값이 삭제되면 자동으로 자식테이블 값 역시 삭제됩니다.
ON DELETE CASCADE - 부모 테이블의 값을 삭제하면 자식 테이블의 값도 연동하여 삭제
ON DELETE SET NULL - 부모 테이블의 값을 삭제하면 자식 테이블의 값이 NULL로 바뀜
UNIQUE
테이블 내에서 열은 유일한 값을 가져야 한다.
테이블 내에서 동일한 값을 가져서는 안 되는 항목에 지정함
- 주 키와의 차이점
PRIMARY KEY와 달리 NULL도 허용
하나의 테이블에 다수의 UNIQUE KEY가 존재할 수 있음
NOT NULL
테이블 내에서 관련 열의 값은 NULL 일 수 없음
필수 입력 항목에 대해 제약 조건으로 설정함
NULL뿐만 아니라 공백 문자열도 허용하지 않는다.
CHECK
개발자가 정의하는 제약 조건
상황에 따라 다양한 조건 설정 가능