▶ DDL (Data Definition Language) : 데이터 정의 언어
- 객체(Object)를 만들고(CREATE), 수정하고(ALTER), 삭제하는(DROP) 등
데이터의 전체 구조를 정의하는 언어로, 주로 DB관리자 / 설계자가 사용함 - 오라클에서의 객체
- 테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE), 인덱스(INDEX), 패키지(PACKAGE),
트리거(TRIGGER), 프로시져(PROCEDURE), 함수(FUNCTION), 동의어(SYNONYM),
사용자(USER)
▶ CREATE
- 테이블이나 인덱스, 뷰 등 다양한 데이터베이스 객체를 생성하는 구문
- 테이블로 생성된 객체는 DROP 구문을 통해 제거할 수 있음
- 1. 테이블(TABLE) 생성하기
- 테이블(TABLE)이란?
- 행(ROW)과 열(COLUMN)으로 구성되는 가장 기본적인 데이터베이스 객체로,
데이터베이스 내에서 모든 데이터는 테이블을 통해 저장됨 - 작성 방법
CREATE TABLE 테이블명(
컬럼명 자료형(크기),
컬럼명 자료형(크기),
...
); - 자료형
- NUMBER : 숫자형(정수, 실수)
- CHAR(크기) : 고정길이 문자형 (2000 byte)
ex) CHAR(10) 컬럼에 'ABC' 3 byte 문자열만 저장해도 10 byte 저장공간을 모두 사용
- VARCHAR2(크기) : 가변길이 문자형 (4000 byte)
ex) VARCHAR2(10) 컬럼에 'ABC' 3 byte 문자열만 저장하면 나머지 7 byte를 반환
- DATE : 날짜 타입
- BLOB : 대용량 이진 데이터(4GB)
- CLOB : 대용량 문자 데이터(4GB)
▶ 데이터 딕셔너리
- 자원을 효율적으로 관리하기 위해 다양한 정보를 저장하는 시스템 테이블
- 사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 할 때,
데이터베이스 서버에 의해 자동으로 갱신되는 테이블
▶ 제약 조건(CONSTRAINTS)
- 사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약으로,
데이터 무결성 보장을 목적으로 함
※ 데이터 무결성이란? 중복 데이터의 최소화, NULL 최소화를 지향 - 입력 데이터에 문제가 없는지 자동으로 검사
+ 데이터의 수정 / 삭제 가능여부 검사 등을 목적으로 함
→ 제약조건을 위배하는 DML 구문은 수행할 수 없음 - 제약조건 종류
- PRIMARY KEY, NOT NULL, UNIQUE, CHECK, FOREIGN KEY
▶ 1) NOT NULL
- 해당 컬럼에 반드시 값을 기록해야 하는 경우 사용
- 삽입 / 수정 시 NULL 값을 허용되지 않게 컬럼 레벨에서 제한함
▶ 2) UNIQUE
- 컬럼 입력 값에 대해서 중복을 제한하는 제약조건
- 컬럼 레벨과 테이블 레벨에서 설정 가능
+ UNIQUE 제약조건이 설정된 컬럼에 NULL 값은 중복으로 삽입 가능
▶ 2+) UNIQUE 복합키
- 두 개 이상의 컬럼을 묶어서 하나의 UNIQUE 제약조건으로 설정
→ 모든 컬럼의 값이 같아야 중복으로 취급함
→ 복합키는 테이블 레벨로만 지정 가능
▶ 3) PRIMARY KEY(기본키) 제약조건
- 테이블에서 한 행의 정보를 찾기 위해 사용할 컬럼을 의미
- 테이블에 대한 식별자(IDENTIFIER) 역할을 함
- (NOT NULL + UNUQUE) 제약조건을 의미
- 한 테이블당 한 개만 설정 가능
- 컬럼 레벨과 테이블 레벨 둘 다 설정 가능
- 한 개의 컬럼에 설정할 수 있고, 여러 개의 컬럼을 묶어서도 설정할 수 있음 (복합키)
▶ 4) FOREIGN KEY(외부키 / 외래키) 제약조건 : 다른 테이블의 PK 또는 UNIQUE 제약조건이 설정된 컬럼
- 참조(REFERENCES)된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있음
- FOREIGN KEY 제약조건에 의해서 테이블 간 관계(RELATIONSHIP)가 형성
- 제공되는 값 외에는 NULL을 사용할 수 있음
- 컬럼 레벨의 경우, 작성 방법
- 컬럼명 자료형(크기) [ CONSTRAINT 이름 ] REFERENCES 참조할 테이블명 [(참조할 컬럼)] [삭제룰] - 테이블 레벨의 경우, 작성 방법
- [ CONSTRAINT 이름 ] FOREIGN KEY (적용할 컬럼명) REFERENCES 참조할 테이블명 [(참조할 컬럼)] [삭제룰]
→ 테이블 레벨에서만 FOREIGN KEY 단어가 사용됨 - 참조될 수 있는 컬럼은 PRIMARY KEY와 UNIQUE로 지정된 컬럼만 외래키로 사용될 수 있음
- 참조할 테이블에서 참조할 컬럼명이 생략되면, PRIMARY KEY로 설정된 컬럼이 자동으로 참조할 컬럼이 됨
▶ 4-1) FOREIGN KEY 삭제 옵션
- 부모 테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떻게 처리할지에 대한 내용을 설정할 수 있음
※ 참조 당하는 테이블 = 부모 테이블 / 참조하는 테이블 = 자식 테이블 - 1) ON DELETE RESTRICTED (삭제 제한)으로 기본 지정
- FOREIGN KEY로 지정된 컬럼에서 사용되고 있는 값일 경우,
제공하는 컬럼의 값은 삭제하지 못함 - 2) ON DELETE SET NULL : 부모키를 삭제할 경우, 자식키를 NULL로 변경하는 옵션
- 3) ON DELETE CASCADE : 부모키를 삭제할 경우, 자식키도 함께 삭제됨
- 부모키를 삭제하는 경우, 자식 테이블의 컬럼에 해당하는 행의 모든 데이터가 같이 삭제됨
= 종속 관계의 행이 모두 삭제됨
▶ 5) CHECK 제약조건
- 컬럼에 기록되는 값에 조건을 설정할 수 있음
- 작성 방법
CHECK ( 컬럼명 비교연산자 비교값)
※ 비교값은 리터럴만 사용 가능 / 변하는 값 또는 함수 사용 불가 / CHECK 제약조건은 범위로도 설정 가능함
▶ 6) SUBQUERY를 이용한 테이블 생성
- 컬럼명, 데이터 타입, 값 복사되고 제약조건은 NOT NULL만 복사됨
▶ 7) 제약조건 추가
- ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] PRIMARY KEY(컬럼명)
- ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] FOREIGN KEY(컬럼명) REFERENCES 참조 테이블명(참조컬럼명)
→ 참조 테이블의 PK(기본키)를 FK로 사용하는 경우, 참조컬럼명 생략 가능 - ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] UNIQUE(컬럼명)
- ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] CHECK(컬럼명 비교연산자 비교값)
- ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL;
▶ ALTER
- 수정 가능한 사항 : 컬럼 자체(추가 / 수정 / 삭제), 제약조건(추가 / 삭제), 이름변경(테이블 / 컬럼 / 제약조건)
- [ 작성법 ]
테이블 수정하는 경우
ALTER TABLE 테이블명 ADD / MODIFY / DROP 수정할 내용;
▶ 1) 제약조건 추가 / 삭제
- 제약조건 추가
: ALTER TABLE 테이블명 ADD [CONSTRAINT 제약조건명] 제약조건(컬럼명) [REFERENCES 테이블명[(컬럼명)]; - 제약조건 삭제
: ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
▶ 2) 컬럼 추가 / 수정 / 삭제
- 컬럼 추가 [ 작성법 ]
: ALTER TABLE 테이블명 ADD(컬럼명 데이터 타입 [DEFAULT '값']); - 컬럼 수정 [ 작성법 ]
: ALTER TABLE 테이블명 MODIFY 컬럼명 데이터 타입; (데이터 타입 변경)
ALTER TABLE 테이블명 MODIFY 컬럼명 DEFAULT '값'; (기본값 변경)
※ 데이터 타입 수정하는 경우, 컬럼에 저장된 데이터 크기 미만으로 변경 불가 - 컬럼 삭제 [ 작성법 ]
: ALTER TABLE 테이블명 DROP (삭제할 컬럼명);
ALTER TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;
※ 테이블에는 최소 1개 이상의 컬럼이 존재해야 되기 때문에 모든 컬럼 삭제는 불가
※ 테이블이란? 행과 열로 이루어진 데이터베이스의 가장 기본적인 객체 - ★★ DDL / DML을 혼용해서 사용할 경우 발생하는 문제점
- DML을 수행하여 트랜잭션에 변경사항이 저장된 상태에서
COMMIT / ROLLBACK 없이 DDL 구문을 수행하게 되면
DDL 수행 동시에 선행된 DML이 자동으로 COMMIT 되어버림
→ 결론 : DDL / DML 혼용해서 사용 X
▶ 3) 테이블 삭제
- [ 작성법 ]
: DROP TABLE 테이블명 [CASCADE CONSTRAINTS]; - ★★ 관계가 형성된 테이블 중 부모 테이블 삭제하는 방법
1) 자식 테이블 먼저 삭제 후 부모 테이블 삭제
2) CASCADE CONSTRAINTS 옵션 사용
→ 제약조건까지 모두 삭제 (FK 제약조건으로 인해 삭제 불가하지만, 제약조건 제거하여 FK 관계를 해제)
▶ 4) 컬럼 / 제약조건 / 테이블 이름 변경(RENAME)
- 1) 컬럼명 변경 [ 작성법 ]
: ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 TO 변경명; - 2) 제약조건명 변경 [ 작성법 ]
: ALTER TABLE 테이블명 RENAME CONSTRAINT 제약조건 TO 변경명; - 3) 테이블명 변경 [ 작성법 ]
: ALTER TABLE 테이블명 RENAME TO 변경명;
'SQL > 기본 개념' 카테고리의 다른 글
DCL(Data Control Language) (1) | 2024.12.16 |
---|---|
VIEW / SEQUENCE / INDEX (0) | 2024.12.16 |
DML (Data Manipulation Language) _ 데이터 조작 언어 (0) | 2024.12.16 |
SUBQUERY(서브쿼리) (0) | 2024.12.16 |
JOIN (0) | 2024.12.16 |