데이터베이스 및 테이블의 구조를 정의하는 역할이다.
명령어를 입력하는 순간 즉시 반영(Auto Commit)된다.
CREATE : 데이터베이스 및 테이블 생성ALTER : 데이터베이스 및 테이블 구조 수정DROP : 데이터베이스 및 테이블 삭제RENAME : 데이터베이스 및 테이블 이름 변경TRUNCATE : 데이터베이스 및 테이블 초기화(데이터 초기화)내부 데이터 관리 역할이다. 즉시 반영되지않고, ROLLBACK으로 되돌릴 수 없다.
트랜잭션의 하위 작업으로 설정된다
SELECT : 데이터 조회INSERT : 데이터 추가UPDATE : 데이터 수정DELETE : 데이터 삭제데이터를 보호하기 위한 보안 역할이다.
데이터베이스에 접근할 권한을 부여하거나 박탈할 수 있다.
GRANT : 권한 설정REVOKE : 권한 삭제트랜잭션을 제어하는 역할이다.
@Transactional어노테이션을 통한 여러 DML의 트랜잭션은 최종적으로 아래 명령어로 변환되어 수행된다.
COMMIT : 트랜잭션을 정상적으로 처리ROLLBACK : 트랜잭션을 다시 되돌림SAVEPOINT : COMMIT 이전의 특정시점을 지정할 수 있도록 하여 반영 혹은 ROLLBACK을 가능하게함CREATE 구문CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름
(
컬럼이름1 컬럼타입1 제약조건,
컬럼이름2 컬럼타입2 제약조건,
...
[CONSTRAINT FK제약조건이름
FOREIGN KEY (컬럼이름)
REFERENCES 참조테이블이름(참조컬럼이름)]
);CREATE TABLE 관련 제약 조건.NOT NULL : 해당 컬럼은 항상 NULL이 아닌 값이 들어가야한다.UNIQUE : 해당 컬럼은 중복된 값이 있으면 안된다.PRIMARY KEY : NOT NULL 과 UNIQUE의 특성을 모두 가진다.FOREIGN KEY : 다른 테이블의 PRIMARY KEY 와 연결 되는 컬럼이다. 테이블 간의 관련성을 표기함으로써, 데이터의 무결성을 보장한다.Primary Key(기본 키) 와 Foreign Key(외래키)

ALTER 구문
ALTER TABLE 테이블이름 ADD 컬럼이름 컬럼타입; - 컬럼 추가
ALTER TABLE 테이블이름 DROP 컬럼이름; - 컬럼 삭제
ALTER TABLE 테이블이름 MODIFY COLUMN 컬럼이름 컬럼타입; - 컬럼 데이터타입 변경
ALTER TABLE 테이블이름 RENAME TO 변경할 테이블이름 - 컬럼 테이블 이름 변경
DROP DATABASE 데이터베이스이름; - 데이터베이스 삭제
DROP TABLE 테이블이름; - 테이블 삭제
테이블 간의 관계
DDL로 만드는 테이블들 사이에는 관계라는 개념이 존재한다. 관계는 총 3가지로 표현할 수 있고, 1:1 관계, 1:N 관계, N:M 관계 가 있다. 이 관계에 따라, FK가 어떻게 위치해야 하는지 알 수 있다.
1:1 관계

1:N 관계

N:M 관계

> 위 처럼 각 Entity 내부의 데이터와, 관계에 대해 표현한 다이어그램을 **ERD(Entity Relationship Diagram)** 이라 한다.
INSERT INTO 테이블이름(컬럼1, 컬럼2, 컬럼3, ...) VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, 데이터값3, ...);
INSERT INTO comment (id, content, post_id) VALUES (5, '댓글3', 1), (6, '댓글4', 2);
SELECT 컬럼이름1, 컬럼이름2, ... FROM 테이블이름 [WHERE 조건];
SELECT * FROM 테이블 이름 [WHERE 조건];
SELECT title FROM post
SELECT * FROM comment WHERE post_id=1;
UPDATE 테이블이름 SET 컬럼이름1=데이터값1, 컬럼이름2=데이터값2, ... WHERE 조건;
UPDATE post SET title='새로운 타이틀' WHERE id=1;
DELETE FROM 테이블이름 WHERE 컬럼이름=데이터값;
SELECT * FROM comment where id >= 3; SELECT * FROM 테이블이름 WHERE 조건1 AND 조건2;
SELECT * FROM 테이블이름 WHERE NOT 조건; SELECT * FROM comment WHERE id > 1 ORDER BY id DESC; SELECT * FROM comment LIMIT 2; SELECT * FROM 테이블이름 WHERE 컬럼 IS NULL; SELECT * FROM comment WHERE content LIKE '%댓글%'; SELECT * FROM comment WHERE id IN (1, 2, 3); SELECT * FROM comment WHERE id BETWEEN 2 AND 4;
JOIN은 두 개 이상의 테이블 간에 데이터를 결합하는데 사용되는 연산이다.
여러 테이블에서 필요한 데이터를 가져와 하나의 결과 집합으로 합칠 수 있다.
특정 조건에 따라 두 테이블의 행(Row)를 결합한다.
| id | title |
|---|---|
| 1 | 제목1 |
| 2 | 제목2 |
| 3 | 제목3 |
| 4 | 제목4 |
|
| id | content | post_id |
|---|---|---|
| 1 | 댓글1 | 1 |
| 2 | 댓글2 | 1 |
| 3 | 댓글3 | 2 |
| 4 | 댓글4 | 2 |
SELECT *
FROM post
INNER JOIN comment ON comment.post_id = post.id;
| id | title | id | content | post_id |
|---|---|---|---|---|
| 1 | 제목1 | 1 | 댓글1 | 1 |
| 1 | 제목1 | 2 | 댓글2 | 1 |
| 2 | 제목2 | 3 | 댓글3 | 2 |
| 2 | 제목2 | 4 | 댓글4 | 2 |
SELECT *
FROM post
LEFT JOIN comment ON comment.post_id = post.id;
| id | title | id | content | post_id |
|---|---|---|---|---|
| 1 | 제목1 | 1 | 댓글1 | 1 |
| 1 | 제목1 | 2 | 댓글2 | 1 |
| 2 | 제목2 | 3 | 댓글3 | 2 |
| 2 | 제목2 | 4 | 댓글4 | 2 |
| 3 | 제목3 | NULL | NULL | NULL |
| 4 | 제목4 | NULL | NULL | NULL |
INNER JOIN 과 동일한 결과를 응답한다.SELECT *
FROM post
RIGHT JOIN comment ON comment.post_id = post.id;
| id | title | id | content | post_id |
|---|---|---|---|---|
| 1 | 제목1 | 1 | 댓글1 | 1 |
| 1 | 제목1 | 2 | 댓글2 | 1 |
| 2 | 제목2 | 3 | 댓글3 | 2 |
| 2 | 제목2 | 4 | 댓글4 | 2 |