SQL (Structured Query Language) 은 구조적인 질의 언어라는 것이다. 이 SQL 이라는 질의 언어를 통해서 데이터베이스를 제어, 관리한다.
DDL 은 Data Define Language 의 약자로 데이터베이스의 Schema(형태)를 정의할 수 있는 쿼리문을 의미한다. CREATE, ALTER, DROP
이 대표적인 쿼리문이다. DDL 에 속하는 쿼리문의 이름에서도 알 수 있듯 데이터를 구성하는 논리적인 구조(데이터베이스 또는 테이블)을 추가하고 수정하고 삭제할 수 있다. 또한 메타데이터(데이터에 대한 데이터)를 다루는 쿼리문이라고 할 수 있다.
// 데이터베이스 생성
CREATE DATABASE [테이블명];
// 테이블 생성
CREATE TABLE user
(
id INT PRIMARY KEY AUTO_INCREMENT '유저 고유번호',
name VARCHAR(30) NOT NULL '이름',
email VARCHAR(50) NOT NULL '이메일',
phone VARCHAR(11) NOT NULL '핸드폰',
sex VARCHAR(1) '성별'
);
DROP TABLE [테이블명];
TRUNCATE TABLE [테이블명];
// 컬럼 추가
ALTER TABLE [테이블명] ADD [추가할컬럼];
// 컬럼 타입 수정
ALTER TABLE [테이블명] MODIFY [변경할컬럼] [변경할타입];
// 컬럼명 수정
ALTER TABLE [테이블명] CHANGE [기존컬럼명] [변경할컬럼명];
// 컬럼 삭제
ALTER TABLE [테이블명] DROP [삭제할컬럼명];
DML 은 Data Manipulation Language 의 약자로 데이터를 조작하는 쿼리문들을 의미한다. INSERT, UPDATE, DELETE 문이 대표적인 쿼리문들이다. 쿼리문의 이름에서도 알 수 있듯이 INSERT 는 데이터를 테이블에 넣는 것을 의미하고, UPDATE 는 이미 테이블에 들어간 데이터를 수정하고, DELETE 는 데이터를 테이블에서 삭제한다.
SELECT * FROM user
UPDATE user
SET email = 'hong@naver.com'
WHERE id = 1;
INSERT INTO user(id,name,email,phone,sex,address)
VALUES('1','홍길동','hong@naver.com','01012345678','남자','서울시 강남구');
DELETE FROM user WHERE id = 1
💡 DROP, TRUNCATE, DELETE 명령어의 차이점
- DELETE : 데이터는 지워지지만 테이블 용량은 줄어들지 않는다. 원하는 데이터만 지울 수 있고, 삭제 후 잘못 삭제한 것을 되돌릴 수 있다.
- TRUNCATE : 용량이 줄어들고, 인덱스 등도 모두 삭제된다. 테이블은 삭제하지 않고 데이터만 삭제하는 특징이 있다. 중요한 점은 삭제 후 절대 되돌릴 수 없으니 주의하여야 한다.
- DROP : 테이블 전체를 삭제한다. TRUNCATE와 마찬가지로 삭제 후 절대 되돌릴 수 없다.
데이터의 보안, 무결성, 회복, 병행 수행제 등을 정의하는 데 사용한다. 데이터베이스의 사용 권한을 관리하는 데 사용되며 GRANT, REVOKE, COMMIT, ROLLBACK 등이 있다. COMMIT과 ROLLBACK 명령어는 TCL(Transaction Control Language)로 트랜잭션을 제어하는 명령어로 구분된다.
// 사용자 권한 부여 명령어
GRANT 권한종류 ON 대상 TO 계정명 IDENTIFIED BY 암호 [WITH GRANT OPTION];
Ex)
// 모든 권한을 가진 계정 생성
GRANT ALL ON *.* TO test@localhost IDENTIFIED BY "test1";
// 특정 데이터베이스에 조회권한을 가진 계정 생성
GRANT SELECT ON test.* TO test@localhost IDENTIFIED BY "test1";
// GRANT로 계정생성 후 아래의 명령어를 실행해야 적용된다.
FLUSH privileges;
// 권한 해제 명령어
REVOKE insert, update, create ON [DB명.테이블명] TO [user@host];
// 전체 권한 해제 명령어
REVOKE ALL ON [DB명.테이블명] TO [user@host];
// 이전까지의 작업을 저장하는 명령어
COMMIT;
ROLLBACK;
*주의점 : COMMIT 하기 이전의 상태만 ROLLBACK이 가능하다. 만약 COMMIT 명령어를 입력하였다면 이전 상태로 되돌릴 수 없다.
DQL은 Data Query Language 의 약자로 데이터를 쿼리하는데 사용되는 SQL문을 뜻한다. DML의 SELECT와 동일하다. 데이터베이스의 상황에 빗대어 보면, 데이터베이스 서버에게 데이터를 달라고 요청하는 것이라고 해석할 수 있다.
SELECT : 테이블에 저장된 데이터를 조회하는 데 사용되는 가장 기본적인 문법이고 가장 많이 사용된다.
SELECT 필드이름 FROM 테이블이름 [WHERE 조건]
일부에서는 DCL 에서 트랜잭션을 제어하는 명령인 COMMIT 과 ROLLBACK 만을 따로 분리해서 TCL 이라고 표현하기도 한다.