데이터 정의어 data definition language
데이터의 유형은 데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아들일 공간을 자료의 유형별로 나누는 기준이라고 생각하면 된다.
즉, 칼럼을 정의할 때 선언한 데이터 유형은 그 칼럼의 자료 유형을 규정하며, 다른 종류의 데이터가 들어오려고 하면 데이터는 에러를 발생시킨다.
| 데이터 유형 | 설명 |
|---|---|
| CHARACTER(s) | 고정 길이 문자열 정보(oracle, SQL Server 모두 CHAR로 표현). s는 기본 길이 1 바이트, 최대 길이 Oracle 2000바이트, SQL Server 8000 바이트. s만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 해당 할당된 변수값의 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워진다. |
| VARCHAR(s) | CHARACTER VARING의 약자로 가변 길이 문자열 정보(Oracle은 VARCHAR2로 표현, SQL Server는 VARCHAR로 표현). s는 최소 길이 1 바이트, 최대 길이 Oracle 4000 바이트, SQL Server 8000 바이트. s만큼 최대 길이를 갖지만 가변 길이로 조정이 되기 때문에 해당 할당된 변수값의 바이트만 적용된다. (Limit 개념) |
| NUMERIC | 정수, 실수 등 숫자 정보(Oracle은 NUMBER로, SQL Server는 10가지 이상의 숫자 타입을 가지고 있음). Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정한다. 예를 들어, 정수 부분이 6자리이고 소수점 부분이 2자리인 경우에는 NUMBER(8,2) |
| DATETIME | 날짜와 시각 정보(Oracle은 DATE로 표현, SQL Server는 DATETIME으로 표현). Oracle은 1초 단위, SQL Server는 3.33ms 단위로 관리 |
VARCHAR와 CHAR의 차이
두 문자열을 비교할 때, CHAR에서는 공백을 채워서 비교하는 방법 사용
따라서 뒤 공백만 다르고 앞 부분이 같으면 같은 문자열로 취급
예) CHAR 유형 ‘AA’ = ‘AA ‘
하지만 VARCHAR 유형은 맨 처음부터 한 문자씩 비교하고 공백도 하나의 문자로 취급하므로 끝의 공백이 다르면 다른 문자로 판단
예) VARCHAR 유형 ‘AA’ <> ‘AA ‘
테이블 생성 규칙
CREATE TABLE 테이블이름{
칼럼명1 DATATYPE [DEFAULT 형식],
칼럼명2 DATATYPE [DEFAULT 형식],
칼럼명3 DATATYPE [DEFAULT 형식],
CONSTRAINT 제약조건명 PRIMARY KEY (칼럼명),
CONSTRAINT 제약조건명 FOREIGN KEY (칼럼명)
};
| 10_PLAYER | 반드시 문자로 시작해야 함 |
|---|---|
| T-PLAYER | 특수 문자 ‘-’는 허용되지 않음 |
NULL의 의미
NULL은 공백이나 숫자 0과는 전혀 다른 값이며, 조건에 맞는 데이터가 없을 때의 공집합과도 다르다. ‘NULL’은 ‘아직 정의되지 않은 미지의 값’이거나 ‘현재 데이터를 입력하지 못하는 경우’를 의미한다
DEFAULT 의미
데이터 입력 시에 칼럼의 값이 지정되어 있지 않을 경우 기본값을 사전에 설정할 수 있다. 입력시 명시된 값을 지정하지 않은 경우에 NULL값이 입력되고, DEFAULT 값을 정의했다면 해당 칼럼에 NULL값이 입력되지 않고 사전에 정의된 기본 값이 자동으로 입력된다.
에)
CREATE TABLE STUDENT{
STUDENT_ID CHAR(8) NOT NULL,
NAME VARCHAR(10) NOT NULL,
DEPT_ID VARCHAR(20) NOT NULL,
GRADE NUMERIC,
ADDRESS VARCHAR(40)
CONSTRAINT STUDENT_PK PRIMARY KEY (STUDENT_ID),
CONSTRAINT STUDENT_FK FOREIGN KEY (DEPT_ID) REFERENCES DEPARTMENT(DEPT_ID)
}
CTAS
Create Table As Select
기존 테이블을 활용하여 새 테이블을 생성하는 것
CREATE TABLE STUDENT_TEMP
AS SELECT * FROM STUDENT;
ALTER TABLE로 테이블의 구조를 변경할 수 있다.
새로운 칼럼을 추가. 새 칼럼은 테이블의 마지막 칼럼이 되며 칼럼의 위치를 지정할 순 없다.
ALTER TABLE 테이블명
ADD COLUMN 추가할_칼럼명 데이터_유형;
예)
ALTER TABLE STUDENT
ADD COLUMN (ACCOUNT VARCHAR(20));
한 번에 하나의 칼럼만 삭제 가능하며, 칼럼 삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야 한다. 주의할 부분은 한 번 삭제된 칼럼은 복구가 불가능하다.
ALTER TABLE 테이블명
DROP COLUMN 삭제할_칼럼명;
예)
ALTER TABLE STUDENT
DROP COLUMN ADDRESS;
테이블에 존재하는 칼럼에 대해서 MODIFY COLUMN 명령을 이용해 칼럼의 데이터 유형, 디폴트 값, NOT NULL 제약조건에 대한 변경을 포함할 수 있다.
ALTER TABLE 테이블명
MODIFY COLUMN (칼럼명1 데이터_유형 [DEFAULT 식] [NOT NULL],
칼럼명2 데이터_유형 [DEFAULT 식] [NOT NULL]...);
예)
ALTER TABLE STUDENT
MODIFY COLUMN (DEPT VARCHAR(15) DEFAULT "학과정보 없음" NOT NULL);
RENAME COLUMN으로 칼럼명이 변경되면, 해당 칼럼과 관계된 제약조건에 대해서도 자동으로 변경되는 장점이 있지만, ADD/DROP COLUMN 기능처럼 ANSI//ISO에 명시되어 있는 기능이 아니고 Oracle 등 일부 DBMS에서만 지원하는 기능이다.
ALTER TABLE 테이블명
RENAME COLUMN 변경할_칼럼명 TO 새_칼럼명
예)
ALTER TABLE STUDNET
RENAME COLUMN ACCOUNT TO BANK_ACCOUNT;
테이블 생성 시 부여했던 제약조건을 삭제
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;
예)
ALTER TABLE STUDENT
DROP CONSTRAINT STUDENT_FK;
테이블 생성 이후에 필요에 의해서 제약조건을 추가
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명 제약조건 (칼럼명);
예)
ALTER TABLE STUDENT
ADD CONSTRAINT STUDENT_FK FOREIGN KEY (DEPT_ID) REFERENCES DEPT (DEPT_ID);
RENAME 명령어를 사용하여 테이블의 이름을 변경할 수 있다
RENAME 변경전_테이블명 TO 변경후_테이블명
예)
RENAME STUDENT TO SWU_STUDENT;
DROP TABLE로 테이블 삭제할 수 있다
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
예)
DROP TABLE STUDENT;
TRUNCATE TABLE은 테이블 내부의 모든 행이 제거되고 저장공간을 재사용 가능하도록 해제된다.
TRUNCATE TABLE STUDENT;
실행 후에도 DESC TEAM을 실행시키면 여전히 칼럼과 데이터 유형, NOT NULL 등 테이블 구조가 나오며, 오직 저장된 데이터(행)만이 삭제된다.
TRUNCATE TABLE은 DDL처럼 튜플을 삭제하지만, 내부처리 방식이나 Auto Commit 특성 등으로 인해 DDL로 분류된다.