728x90
00. 데이터 정의어 - DDL (Data Definition Language)
테이블 구조정의 명령어
명령어 | 설명 |
CREATE | 테이블 생성 |
ALTER | 테이블 변경 |
DROP | 테이블 삭제 |
RENAME | 테이블 이름 변경 |
01. CREATE
CREATE TABLE 테이블명 (
칼럼명1 DATATYPE [DEFAULT 형식],
칼럼명2 DATATYPE [DEFAULT 형식],
칼럼명3 DATATYPE [DEFAULT 형식],
);
테이블 작성시 주의해야 할 규칙
- 테이블명은 객체를 의미하는 적절한 이름 사용. 가능한 단수형
- 테이블명은 다른 테이블명과 중복 불가
- 한 테이블 내에서 칼럼명 중복 불가
- 테이블명은 영어 대소문자, 0-9, _, $, # 문자만 허용 (하이픈'-' 허용 X)
- 테이블명은 반드시 숫자가 아닌 문자로 시작
테이블 제약조건
- 칼럼의 데이터 유형 뒤에 제약조건을 정의하는 칼럼 LEVEL 정의 방식
- 테이블 생성 마지막에 모든 제약조건을 기술하는 테이블 LEVEL 정의 방식
💡 제약조건
사용자가 원하는 조건의 데이터만 유지하기 위한 것. 즉, 데이터의 무결성을 유지하기 위한 DB의 보편적인 방법으로 테이블의 특정 칼럼에 설정하는 제약
제약 조건의 종류
명령어 | 설명 |
PRIMARY KEY (기본키) | 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키. 하나의 테이블에 하나의 기본키 제약만 정의할 수 있음 (기본키 제약 = 고유키 제약 & NOT NULL 제약) |
UNIQUE KEY (고유키) | 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키. 단 NULL은 고유키 제약의 대상이 아니므로 NULL값을 가진 행이 여러 개가 있어도 고유키 제약 위반이 되지 않음 |
NOT NULL | NULL 값 입력 금지. 해당 칼럼 필수 입력 |
CHECK | 입력할 수 있는 값의 범위 등을 제한. CHECK 제약으로는 TRUE or FALSE로 평가할수 있는 논리 식을 지정 e.g. Age int CHECK(Age >= 18) |
FOREIGN KEY (외래키) | 관계형 DB에서 테이블 간 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키가 생성됨 |
💡 NULL
NULL(ASCII 코드 00번)은 공백(BLANK, ASCII 코드 32번)이나 숫자 0(ZERO, ASCII 48번)과는 전혀 다른 값이며, 조건에 맞는 데이터가 없을 때의 공집합과도 다르다. 'NULL'은 아직 정의되지 않은 미지의 값이나 현재 데이터를 입력하지 못하는 경우를 의미한다
💡 DEFAULT
데이터 입력 시에 칼럼의 값이 지정되어 있지 않을 경우 기본값(DEFAULT)을 사전에 설정할 수 있다. 데이터 입력시 명시된 값을 지정하지 않은 경우에는 NULL 값이 입력되고, DEFAULT 값을 정의 했다면 해당 칼럼에 NULL 값이 입력되지 않고 사전에 정의된 기본값이 자동으로 입력된다
생성된 테이블 구조 확인
[Oracle]
DESCRIBE 테이블명;
DESC 테이블명;
[SQL Server]
sp_help dbo.테이블명;
02. ALTER
ADD COLUMN
기존 테이블에 필요한 칼럼을 추가하는 명령
ALTER TABLE 테이블명 ADD 추가할_칼럼명 데이터_유형;
새롭게 추가된 칼럼은 테이블의 마지말 칼럼이 된다.
DROP COLUMN
기존 테이블에서 필요없는 칼럼을 삭제하는 명령
ALTER TABLE 테이블명 DROP COLUMN 삭제할_칼럼명;
MODIFY COLUMN
칼럼의 데이터 유형, 디폴트 값, NOT NULL, 제약조건을 변경하는 명령
[Oracle]
ALTER TABLE 테이블명
MODIFY (칼럼명1 데이터유형 [DEFAULT 식][NOT NULL],
칼럼명2 테이터유형 [DEFAULT 식][NOT NULL]...);
[SQL Server]
ALTER TABLE 테이블명
ALTER (칼럼명1 데이터유형 [DEFAULT 식][NOT NULL],
칼럼명2 데이터유형 [DEFAULT 식][NOT NULL]...);
칼럼 변경시 주의사항
- 해당 칼럼의 크기를 늘릴 수는 있지만 줄일 수는 없다 → 기존 데이터의 훼손 방지
- 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있다
- 해당 칼럼이 NULL 값만 가지고 있으면 데이터 유형을 변경할 수 있다
- 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미친다
- 해당 칼럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다
RENAME COLUMN
칼럼명을 변경하는 명령
ALTER TABLE 테이블명 RENAME COLUMN 변경해야할_칼럼명 TO 새로운_칼럼명;
DROP CONSTRAINT
테이블 생성 시 부여했던 제약조건을 삭제하는 명령
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
ADD CONSTRAINT
테이블 생성 이후에 제약조건을 추가하는 명령
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
03. RENAME
RENAME 명령어를 사용하여 테이블의 이름을 변경할 수 있다
[Oracle]
RENAME 변경_전_테이블명 TO 변경_후_테이블명;
[SQL Server]
sp_rename 변경_전_테이블명, 변경_후_테이블명;
04. DROP
테이블을 삭제하는 명령
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
CASCADE CONSTRAINT 옵션은 해당 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제한다는 것을 의미한다
05. TRUNCATE
TRUNCATE TABLE은 테이블 자체가 삭제되는 것은 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제한다
TRUNCATE TABLE 테이블명;
728x90
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] SQL 기본 - TCL (Transaction Control Language) (0) | 2023.08.30 |
---|---|
[SQLD] SQL 기본 - DML(Data Manipulation Language) (0) | 2023.08.30 |
[SQLD] 데이터 유형 (0) | 2023.08.30 |
[SQLD] SQL 기본 - 관계형 데이터베이스 개요 (0) | 2023.08.30 |
[SQLD] 데이터 모델과 성능 - 대용량 데이터에 따른 성능, DB 구조와 성능, 분산DB 데이터에 따른 성능 (0) | 2023.08.30 |