데이터 정의 언어 DDL(Data Definition Language) 종류와 기능
종류 | 적용 | 기능 |
---|
CREATE | DATABASE | 데이터베이스 생성 |
| SCHEAMA | 스키마 생성 |
| TABLE | 테이블 생성 |
| INDEX | 인덱스 생성 |
| VIEW | 뷰 생성 |
ALTER | DATABASE | 데이터베이스 수정 |
| SCHEMA | 스키마 수정 |
| TABLE | 테이블 수정 |
DROP | DATABASE | 베이터베이스 삭제 |
| SCHEMA | 스키마 삭제 |
| TABLE | 테이블 삭제 |
| INDEX | 인덱스 삭제 |
| VIEW | 뷰 삭제 |
데이터 타입의 종류
종류 | 적용 | 기능 |
---|
정수 | TINYINT | -128~127 사이의 정수 |
| SMALLINT | -32768~32767 사이의 정수 |
| MEDIUMINT | -8388608~8388607 사이의 정수 |
| INT | -2147483648~2147483647 사이의 정수 |
부동 소수형 | FLOAT | 4byte의 크기를 갖는 부동 소수 |
| DOUBLE | 8byte의 크기를 갖는 부동 소수 |
문자 | CHAR(n) | 길이가 n으로 고정된 문자열 |
| VARCHAR(n) | 최대 n개로 구정된 가변길이 문자열 |
| TEXT | 길이가 긴 가변길이 문자열 |
| ENUM | 유한 개의 문자열 집합 중 하나의 값을 선택 |
날짜/시간 | DATE | ‘CCYY-MM-DD’ |
| TIME | ‘00:00:00’ |
| DATETIME | ‘CCYY-MM-DD 00:00:00’ |
| TIMESTAMP | ‘CCYY-MM-DD 00:00:00’ |
VARCHAR(n)와 CHAR(n)의 차이점
- VARCHAR(n)는 문자열의 길이에 필요한 공간만 사용하여 공간을 효과적으로 사용할 수 있다.
- 데이터 수정 시 VARCHAR(n)는 별도의 연산이 동반되어 수정 및 검색 속도가 CHAR(n)보다 떨어진다.
DATATIME과 TIMESTAMP의 차이점
- DATATIME은 8byte의 공간을 가지며 날짜와 시간이 MySQL 서버의 타임존에 따라 변경된다.
- TIMESTAMP는 4byte의 공간을 가지며 날짜와 시간이 표준시(UTC)를 기준으로 항상 일정하다.
테이블 생성하기
1
2
3
4
5
6
7
8
9
| CREATE TABLE 테이블이름 (
컬럼1 데이터타입1 [제약조건1],
컬럼2 데이터타입2 [제약조건2],
...
컬럼n 데이터타입n [제약조건n]
[PRIMARY KEY 컬럼]
[UNIQUE 컬럼]
[FOREIGN KEY 컬럼 REFERENCES 테이블(컬럼)]
)
|
예시
‘교수번호’, ‘교수이름’, ‘직위’, ‘소속학과’, ‘연봉’ 컬럼을 갖는 교수 테이블을 생성하라. 단, 각각의 컬럼에 대한 데이터 타입은 CHAR(13), VARCHAR(30), CHAR(10), CHAR(50), INT이고, 모든 컬럼은 NULL일 수 없다.
1
2
3
4
5
6
7
| CREATE TABLE 교수 (
교수번호 CHAR(13) NOT NULL,
교수이름 VARCHAR(30) NOT NULL,
직위 CHAR(10) NOT NULL,
소속학과 CHAR(50) NOT NULL,
연봉 INT NOT NULL
)
|
테이블 수정하기
1
2
3
4
5
| ALTER TABLE 테이블이름
[ADD COLUMN 컬럼 데이터타입 [제약조건]]
[DROP COLUMN 컬럼, ...]
[CHANGE COLUMN 수정전컬럼, 수정후컬럼]
[MODIFY COLUMN 컬럼 새로운_데이터타입]
|
예시
교수 테이블에 데이터 타입이 INT인 ‘나이’ 컬럼을 추가하라.
1
2
| ALTER TABLE 교수
ADD COLUMN 나이 INT;
|
교수 테이블에서 ‘직위’ 컬럼을 삭제하라.
1
2
| ALTER TABLE 교수
DROP COLUMN 직위;
|
테이블 삭제하기
제약조건 사용하기
- PRIMARY KEY
- 하나 이상의 컬럼을 기본키로 설정할 수 있다.
- PRIMARY KEY로 설정된 컬럼의 레코드는 NULL 값을 가질 수 없으며, unique한 값을 가져야 한다.
- NOT NULL (=NN)
- NOT NULL로 설정된 컬럼의 레코드는 NULL 값을 가질 수 없다.
- UNIQUE
- UNIQUE로 설정된 컬럼의 레코드는 다른 레코드와 동일한 값을 가질 수 없다.
- AUTO_INCREMENT
- 레코드가 추가될 때 1부터 순차적으로 1씩 증가된다.
- INT 타입의 데이터에만 적용된다.
- DEFAULT
- 해당 컬럼에 값이 없으면 디폴트로 지정된 값이 입력된다.
- FOREIGN KEY
- CHECK
- 특정 조건을 통과할 때만 레코드를 삽입 또는 수정한다.
예시
1
2
3
4
5
6
7
8
9
10
11
| CREATE TABLE 과목 (
과목코드 CHAR(5) NOT NULL,
과목명 VARCHAR(200) NOT NULL,
학점 INT NOT NULL,
선수과목 CHAR(5) NULL,
이수구분 CHAR(20) NULL CHECK (이수구분 IN ('전공필수', '일반선택', '교양')),
교수번호 CHAR(13) NOT NULL,
PRIMARY KEY (과목코드),
FOREIGN KEY (선수과목) REFERENCES 과목(과목코드)
FOREIGN KEY (교수번호) REFERENCES 교수(교수번호)
)
|
데이터 조작 언어 DML(Data Manipulation Language) 종류와 기능
데이터베이스 스키마 내의 데이터에 여러 연산을 수행하기 위한 명령어
- INSERT: 새로운 레코드를 삽입
- UPDATE: 조건을 만족하는 레코드의 컬럼값 수정
- DELETE: 조건을 만족하는 레코드를 삭제
- SELECT: 조건을 만족하는 레코드를 검색
INSERT
1
2
| INSERT INTO 테이블이름
VALUES(v1, v2, ..., vn)
|
예시
학과 테이블에 단과대학 ‘자연과학대학’, 학과이름 ‘농학과’, 졸업학점 140, 전화번호 ‘02-3668-4600’인 레코드를 삽입하라.
1
2
| INSERT INTO 학과 (단과대학, 학과이름, 졸업학점, 전화번호)
VALUES('자연과학대학', '농학과', 140, '02-3668-4600')
|
VALUES 절에서 값이 나열된 순서가 컬럼이 정의된 순서와 다른 경우 각각의 값이 어느 컬럼에 해당하는 값인지 테이블이름 부분에 명시하여야 한다.
UPDATE
1
2
| UPDATE 테이블이름
SET 컬럼1 = 값1[, 컬럼2=값2, 컬럼3=값3, ..., 컬럼n=값n]
|
예시
모든 학생의 나이를 1씩 증가시켜라.
1
2
| UPDATE 학생
SET 나이 = 나이 + 1;
|
DELETE
1
2
| DELETE FROM 테이블이름
[WHERE 조건]
|
예시
소속학과가 ‘행정학과’인 교수의 레코드를 삭제하라.
1
2
| DELETE FROM 교수
WHERE 소속학과 = '행정학과';
|