diff --git a/back/database/sql-first-step/sql-first-step-05.md b/back/database/sql-first-step/sql-first-step-05.md
index caba8bd..74345e0 100644
--- a/back/database/sql-first-step/sql-first-step-05.md
+++ b/back/database/sql-first-step/sql-first-step-05.md
@@ -1,6 +1,6 @@
---
id: sql-first-step-05
-title: 5장 집계와 서브쿼리 - 집계
+title: 5장 집계
authors: hank
tags: [hank, SQL 첫걸음, mysql, 집계함수, COUNT, AVG, SUM, MIN, MAX, GROUP BY]
keywords: [SQL 첫걸음, mysql, 집계함수, COUNT, AVG, SUM, MIN, MAX, GROUP BY]
diff --git a/back/database/sql-first-step/sql-first-step-06.md b/back/database/sql-first-step/sql-first-step-06.md
index f2b5be1..8167908 100644
--- a/back/database/sql-first-step/sql-first-step-06.md
+++ b/back/database/sql-first-step/sql-first-step-06.md
@@ -1,6 +1,6 @@
---
id: sql-first-step-06
-title: 5장 집계와 서브쿼리 - 서브 쿼리
+title: 5장 서브 쿼리
authors: hank
tags: [hank, SQL 첫걸음, mysql, sub query, 서브쿼리, 스칼라 서브쿼리, Scalar Subquery]
keywords: [SQL 첫걸음, mysql, sub query, 서브 쿼리, 메인 쿼리, Scalar Subquery]
diff --git a/back/database/sql-first-step/sql-first-step-07.md b/back/database/sql-first-step/sql-first-step-07.md
new file mode 100644
index 0000000..648866e
--- /dev/null
+++ b/back/database/sql-first-step/sql-first-step-07.md
@@ -0,0 +1,174 @@
+---
+id: sql-first-step-07
+title: 6장 테이블 생성과 제약
+authors: hank
+tags: [hank, SQL 첫걸음, mysql, ALTER TABLE, CONSTRAINT, 제약]
+keywords: [SQL 첫걸음, mysql, ALTER TABLE, CONSTRAINT, 제약]
+last_update:
+ date: 12/16/2023
+ author: hank
+---
+
+
+## 데이터베이스 객체
+
+데이터베이스 객체란 테이블이나 뷰, 인덱스 등 데이터베이스 내에 정의하는 모든 것을 일컫는 말입니다.
+
+- 기존 이름이나 예약어와 중복하지 않는다
+- 언더스코어(_) 이외의 기호는 사용할 수 없다.
+- 시스템이 허용하는 길이를 초과하지 않는다.
+
+```bash
+// bash
+mysql -u root -p // sql 로그인
+
+// sql
+CREATE SCHEMA `스키마_이름` DEFAULT CHARACTER SET utf8;
+```
+
+데이터베이스 객체는 스키마라는 네임스페이스 범위에서 생성됩니다. 우리는 mysql을 설치하고 스키마를 기준으로 여러 서비스의 DB를 생성할 수 있습니다. 스키마를 기준으로 데이터들이 구조화하고 정리됩니다.
+
+
+
+
+
+
+## 테이블 작성, 삭제, 변경
+
+DDL 명령어들은 데이터를 정의하거나 스키마 내의 객체를 관리할 때 사용됩니다.
+
+- DML : SELECT, INSERT, DELETE, UPDATE 등 데이터를 조작하는 명령
+
+
+
+### 테이블 작성
+
+```sql
+CREATE TABLE 테이블명
+ -> id INT NOT NULL AUTO_INCREMENT,
+ -> commenter INT NOT NULL,
+ -> comment VARCHAR(100) NOT NULL,
+ -> created_at DATETIME NOT NULL DEFAULT now(),
+ -> INDEX commenter_idx (commenter ASC),
+ -> id INT NOT NULL AUTO_INCREMENT
+ ->;
+// 마지막은 항상 세미콜론 까먹지 않기
+```
+
+RDBMS에서 데이터베이스 상에 제일 먼저 만드는 객체 중 하나가 바로 테이블입니다. `CREATE TABLE` 에 이어서 작성하고 싶은 테이블과 컬럼들의 타입을 나열해줍니다.
+
+```sql
+DESC 테이블명;
+```
+
+테이블의 컬럼 구성을 확인할 수 있습니다.
+
+
+
+### 테이블 삭제
+
+```sql
+// 테이블 삭제
+DROP TABLE 테이블명;
+
+// 테이블 구성은 유지하고 전체 레코드 삭제
+DELETE FROM 테이블명;
+
+// 테이블 구성은 유지하고 전체 레코드 삭제, 위 명령어보다 속도가 빠름
+TRUNCATE TABLE 테이블명;
+```
+
+데이터베이스에서 테이블을 삭제하는 명령어입니다. 만약 테이블 정의는 그대로 둔채 삭제하고 싶다면 `DELETE` 명령으로 실행해야합니다. 처리속도를 빠르게 하고 싶을 땐 `TRUNCATE TABLE` 을 사용합니다.
+
+
+
+### 테이블 변경
+
+```sql
+ALTER TABLE 테이블명 변경명령;
+// 1. 컬럼 추가
+ALTER TABLE 테이블 ADD 열정의;
+
+// 2. 컬럼의 타입, 제약 변경
+ALTER TABLE 테이블 MODIFY 열정의;
+
+// 3. 컬럼의 이름 변경
+ALTER TABLE 테이블 CHANGE `기존 열명` `신규 열명`;
+
+// 4. 컬럼 삭제
+ALTER TABLE 테이블 DROP `기존 열명`;
+```
+
+`ALTER TABLE` 명령어는 테이블을 생성한 뒤에 변경하고 싶을 때 사용합니다. 구성된 컬럼, 제약을 추가, 삭제, 변경할 수 있습니다.
+
+- `MODIFY` : 변경을 시도할 때 레코드들의 데이터 또한 같이 변환되는데 실패 시 ALTER 명령도 중지됨
+
+
+
+
+
+
+## 제약
+
+### 테이블 작성시 제약 정의
+
+테이블에서는 각 열을 정의하면서 제약을 정할 수 있습니다.
+
+```sql
+CREATE TABLE 테이블명 (
+ a INTEGRER NOT NULL,
+ b INTEGRER NOT NULL UNIQUE,
+ c INTEGRER DEFAULT 1,
+ d INTEGRER CHECK(d > 10),
+ name VARCHAR(30),
+ CHECK (a < b)
+);
+```
+
+열에 대해 정의하는 제약을 열제약이라고 부릅니다. 열 제약에는 많은 키워드가 있습니다.
+
+- `DEFAULT “value”` : 레코드가 생성될 때 기본값을 제공합니다.
+- `CHECK(열명 조건문)` : 조건문을 만족해야만 레코드를 생성할 수 있게 할 수 있습니다.
+- `NOT NULL` : NULL 값을 제한하는 제약입니다.
+- `UNIQUE` : 테이블에서 중복되는 값을 제한하는 제약입니다.
+
+```sql
+CREATE TABLE 테이블명 (
+ age INT CONSTRAINT age_over_20 CHECK(age > 20)
+ age2 INT CHECK(age2 > 20)
+);
+```
+
+`CONSTRAINT` 키워드를 사용하면 제약사항에 이름을 붙일 수 있습니다. 이름을 붙이는 이유는 DB에서 제약사항을 위반하여 메세지를 보내줄 때 자동으로 생성되는 이름이 아닌 우리가 선언한 이름으로 보여줄 수 있습니다.
+
+- 붙였을 때 : Check constraint ‘age_over_20’ is violated.
+- 붙이지 않았을 때 : Check constraint ‘테이블명_chk1’ is violated.
+
+
+
+### 제약 변경
+
+```sql
+ALTER TABLE 테이블명 MODIFY 열명 VARCHAR(10) NOT NULL;
+```
+
+모든 열 추가, 이름 변경, 타입 변경, Key 변경, 추가 등등 테이블의 Schema를 변경하고 싶을 때는 `ALTER TABLE` 이라는 키워드로 시작합니다.
+
+```sql
+ALTER TABLE 테이블명 MODIFY 열명 타입;
+```
+
+제약을 삭제하거나 업데이트할 때는 `MODIFY` 키워드를 사용하여 다시 선언해주는 방식으로 변경합니다.
+
+```sql
+ALTER TABLE 테이블명 DROP CONSTRAINT 제약명;
+ALTER TABLE 테이블명 DROP PRIMARY KEY;
+```
+
+테이블 제약의 경우에는 DROP 명령을 추가로 사용해야합니다.
+
+
+
+# reference
+
+https://www.youtube.com/watch?v=c8WNbcxkRhY&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=3
\ No newline at end of file