1. 정의
데이터베이스에서 데이터를 추출하고 조작하는데 사용되는 프로그램 언어
2. 주요 SQL
1) DDL : 데이터베이스 정의 언어
2) DML : 데이터베이스 조작 언어
3) DSL : 데이터베이스 제어 언어
4) TCL : 트랜잭션 제어 언어
메타데이터 관리어
1) SHOW
SHOW DATABASES;
→ DB 서버에 존재하는 모든 데이터베이스 목록 조회
SHOW VARIABLES LIKE 'datadir';
→ 현재 DB 서버의 데이터 저장 경로(로컬 경로) 확인
SHOW TABLES;
→ 현재 사용 중인 데이터베이스의 모든 테이블 목록 조회
2) USE
USE 데이터베이스명;
→ 지정한 데이터베이스를 활성화(선택) 하여 사용
데이터 정의어
1) CREATE
CREATE DATABASE 데이터베이스명;
→ 새 데이터베이스 생성
CREATE TABLE 테이블명 ( 속성명1 타입 제약조건, 속성명2 타입 제약조건 );
→ 새 테이블 생성
2) DROP
DROP DATABASE 데이터베이스명;
→ 해당 데이터베이스 삭제
DROP DATABASE IF EXISTS 데이터베이스명;
→ 해당 DB가 존재할 경우에만 삭제
DROP TABLE 테이블명;
→ 테이블 삭제
DROP TABLE IF EXISTS 테이블명;
→ 테이블이 존재할 경우에만 삭제
데이터 조작어 (DML: Data Manipulation Language)
1) INSERT
특정 컬럼에 값 추가
INSERT INTO 테이블명(속성명1, 속성명2)
VALUES (값1, 값2);
모든 컬럼에 값 추가 (속성명 생략 가능하지만 순서 중요):
INSERT INTO 테이블명
VALUES (값1, 값2, 값3, ...);
데이터타입
정수 (Integer)
| 타입 | 저장크기 | 범위 (Signed 기준) | 설명 |
|---|
tinyint | 1 byte | -128 ~ +127 | 아주 작은 정수 |
smallint | 2 byte | -32,768 ~ +32,767 | 작은 정수 |
mediumint | 3 byte | -8백만 ~ +8백만 정도 | 중간 정수 |
int | 4 byte | -21억 ~ +21억 정도 | 가장 일반적인 정수형 |
bigint | 8 byte | ±900경 (거의 무한대 수준) | 매우 큰 숫자 저장용 |
실수 (Floating Point)
| 타입 | 저장크기 | 특징 |
|---|
float | 4 byte | 소수 저장 (단정밀도) |
double | 8 byte | 더 정밀한 소수 저장 (배정밀도) |
decimal(정수,소수) | 문자 기반 | 오차 없는 소수 처리 (ex. 돈💰) |
날짜/시간 (Date & Time)
| 타입 | 예시 값 | 설명 |
|---|
date | 2025-07-17 | 날짜만 저장 |
time | 10:20:10 | 시간만 저장 |
datetime | 2025-07-17 10:20:10 | 날짜 + 시간 (자주 씀) |
문자 (Text/String)
| 타입 | 특징 | 최대 글자 수 |
|---|
char(n) | 고정 길이, 부족하면 공백 채움 | 최대 255 |
varchar(n) | 가변 길이, 글자 수만큼만 저장 | 최대 255 |
text | 긴 문자열 저장 가능 | 약 6만 자 |
longtext | 초대형 텍스트 저장 (게시판, 블로그 등) | 약 42억 자 |
논리형 (Boolean)
| 타입 | 저장 형태 | 설명 |
|---|
bool | tinyint(1) | true(1), false(0) 저장 가능 |
⚠ 실제 DB에는 숫자 0, 1로 저장됨
SQL 제약조건 (CONSTRAINT)
1. NOT NULL
- NULL 저장 금지 (반드시 값 입력해야 함)
- 예: 이름, 아이디, 이메일 등 필수 입력 항목
name VARCHAR(20) NOT NULL
2. UNIQUE
- 중복 금지 (고유한 값만 허용)
- 예: 주민번호, 아이디, 이메일 등 중복되면 안 되는 항목
email VARCHAR(100) UNIQUE
3. DEFAULT
- 값 생략 시 자동으로 들어가는 기본값 지정
- 예: 가입일, 기본 수량 등
created_at DATETIME DEFAULT now()
stock INT DEFAULT 0
4. AUTO_INCREMENT (MySQL 전용)
- 자동으로 순차 번호 부여 (1씩 증가)
- 예: 회원번호, 주문번호 등 자동 번호 부여할 때 사용
- PK와 함께 사용되는 경우 많음!
id INT AUTO_INCREMENT PRIMARY KEY
5. PRIMARY KEY (기본키 / PK)
- 해당 테이블의 대표 식별자
- 예: 학번, 사번, 제품번호, 주문번호 등
- 중복 ❌ / NULL ❌ (자동으로 NOT NULL, UNIQUE 포함됨)
- 한 테이블에 하나만 설정 가능
CONSTRAINT PRIMARY KEY(학생번호)
6. FOREIGN KEY (외래키 / FK)
- 다른 테이블의 PK를 참조하는 키
- 예
수강신청 테이블 → 학생 테이블의 학번 참조
주문 테이블 → 회원 테이블의 회원번호 참조
- 특징
- 중복 O / NULL O
- 참조하는 PK 필드와 타입이 같아야 함
- 이름도 관례적으로 같게 함
CONSTRAINT FOREIGN KEY(학생번호_fk)
REFERENCES 학생(학생번호_pk)
- ⚠주의사항
FK의 자료형은 PK와 같아야 함
제약조건 이름 생략 가능하지만, 이름 붙이는 게 추후 유지보수에 도움됨
참조 테이블이 먼저 생성되어 있어야 함