개념
하위 태스크 1
doitsql스키마 구조 확인
SHOW DATABASES,SHOW TABLES,SHOW COLUMNS로 기본 구조 파악
DBeaver에서 다음 SQL 스크립트를 실행하여 doitsql 데이터베이스와 doit_dml, doit_notnull 테이블을 생성한다.
CREATE DATABASE doitsql;
USE doitsql;
CREATE TABLE doit_dml (
col_1 INT,
col_2 VARCHAR(50),
col_3 DATETIME
);
CREATE TABLE doit_notnull (
col_1 INT,
col_2 VARCHAR(50) NOT NULL
);SHOW 문을 사용하여 생성된 테이블과 테이블의 열에 대한 정보를 확인한다.
생성된 모든 테이블 조회:
SHOW TABLES;
doit_dml 테이블의 열 조회:
SHOW COLUMNS FROM doit_dml;
doit_notnull 테이블의 열 조회:
SHOW COLUMNS FROM doit_notnull;
현재 데이터베이스 스키마 구조를 그림으로 나타내면 다음과 같다.

하위 태스크 2 ~ 3
DML 예제 실행 및 추적
03-1.sql의 INSERT·UPDATE·DELETE 를 실행하고 각 단계별 결과 확인
제약조건 위반 오류 실험
NOT NULL, 타입 불일치 등 오류 예제를 실행해 에러 메시지 분석
doit_dml 테이블
다음은 doit_dml 테이블에 대한 DML 문장의 목록이다.
-- (1)
INSERT INTO doit_dml (col_1, col_2, col_3)
VALUES (1, 'DoItSQL', '2023-01-01');
-- (2)
INSERT INTO doit_dml (col_1)
VALUES ('문자 입력');
-- (3)
INSERT INTO doit_dml
VALUES (2, '열 이름 생략', '2023-01-02');
-- (4)
INSERT INTO doit_dml
VALUES (3, 'col_3 값 생략');
-- (5)
INSERT INTO doit_dml (col_1, col_2)
VALUES (3, 'col_3 값 생략');
-- (6)
INSERT INTO doit_dml (col_1, col_3, col_2)
VALUES (4, '2023-01-03', '열순서 변경');
-- (7)
INSERT INTO doit_dml (col_1, col_2, col_3)
VALUES
(5, '데이터 입력5', '2023-01-03'),
(6, '데이터 입력6', '2023-01-03'),
(7, '데이터 입력7', '2023-01-03');
-- (8)
UPDATE doit_dml SET col_2 = '데이터 수정'
WHERE col_1 = 4;
-- (9)
UPDATE doit_dml SET col_1 = col_1 + 10;
-- (10)
DELETE FROM doit_dml WHERE col_1 = 14;
-- (11)
DELETE FROM doit_dml;목록에 나열된 모든 DML 문장을 하나씩 실행한 뒤 SELECT * FROM doit_dml으로 변경 내용을 확인한 결과는 다음과 같다.
문장 (1) 실행 결과:

문장 (2) 실행 결과:
오류
col_1의 데이터 형식은INT로 설정되어 있다. 문장 (2)는col_1열의 위치에 문자열을 전달하였기 때문에 데이터 형식이 일치하지 않아 오류가 발생한다.
문장 (3) 실행 결과:

문장 (4) 실행 결과:
오류
INSERT 문 사용 시, 열의 이름을 생략하려면 모든 열에 대응하는 값을 VALUES 절에 전달해야 한다. 문장 (4)는 3개의 열 중 2개 열에 대한 값만을 전달하기 때문에 오류가 발생한다.
문장 (5) 실행 결과:

문장 (6) 실행 결과:

문장 (7) 실행 결과:

문장 (8) 실행 결과:

문장 (9) 실행 결과:

문장 (10) 실행 결과:

문장 (11) 실행 결과:

doit_notnull 테이블
다음은 doit_notnull 테이블에 대한 DML 문장의 목록이다.
-- (1)
INSERT INTO doit_notnull (col_1) VALUES (1);목록에 나열된 모든 DML 문장을 하나씩 실행한 뒤 SELECT * FROM doit_notnull을 실행하여 변경 내용을 확인한 결과는 다음과 같다.
문장 (1) 실행 결과:
오류
doit_notnull의col_2열은NOT NUll제약 조건이 설정되어 있다. 문장 (1)은col_2열에 대한 값을 포함하지 않았기 때문에 실행 시 오류가 발생한다.
하위 태스크 4
도메인 테이블 설계
간단한 도메인을 정하고, PK/제약조건을 포함한 테이블을 직접 설계
TODO 목록에 관한 테이블을 설계한다. 요구 사항은 다음과 같다.
- TODO는 식별자, 설명, 완료 열을 가진다.
- 식별자는 숫자 자료형의 값이며 중복될 수 없고 필수적으로 지녀야 하는 열이다.
- 설명은 20자 이내의 문자열 값을 갖는 열이다.
- 완료는 참 또는 거짓의 진리값을 갖는 열이다.
다음 블록은 todo_db 데이터베이스에 todo_table 테이블을 생성한다.
CREATE DATABASE todo_db;
USE todo_db;
CREATE TABLE todo_table (
id INT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(20) NOT NULL,
done BOOL DEFAULT FALSE
);하위 태스크 5
도메인용 DML 작성
설계한 테이블에 대해 INSERT/UPDATE/DELETE 문을 직접 작성·실행
INSERT 문을 실행하여 todo_table 테이블에 데이터를 추가한다.
INSERT INTO todo_table (description) VALUES ('전자책 구매');
INSERT INTO todo_table (description) VALUES ('영화 감상');
INSERT INTO todo_table (description, done) VALUES ('보조 배터리 구매', FALSE);
INSERT INTO todo_table (description, done) VALUES ('커피 챙기기', TRUE);SELECT * FROM todo_table을 실행한 결과는 다음과 같다.

UPDATE 문을 실행하여 등록된 데이터를 수정한다.
UPDATE todo_table SET done = 1 WHERE id = 2;
UPDATE todo_table SET description = '심청전 구매', done = 1 WHERE id = 1;SELECT * FROM todo_table을 실행한 결과는 다음과 같다.

DELETE 문을 실행하여 등록된 데이터를 삭제한다.
DELETE FROM todo_table WHERE id = 3;SELECT * FROM todo_table을 실행한 결과는 다음과 같다.

하위 태스크 6
초기화 스크립트 작성
스키마/테이블/데이터를 한 번에 준비하는
.sql스크립트 작성
다음은 지금까지의 과정을 일괄적으로 수행하는 스크립트다.
02_02_init.sql:
-- 데이터베이스 생성
DROP DATABASE IF EXISTS todo_db;
CREATE DATABASE todo_db;
USE todo_db;
-- 테이블 생성
CREATE TABLE todo_table (
id INT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(20) NOT NULL,
done BOOL DEFAULT FALSE
);
-- 테스트 데이터 삽입
INSERT INTO todo_table (description) VALUES ('전자책 구매');
INSERT INTO todo_table (description) VALUES ('영화 감상');
INSERT INTO todo_table (description, done) VALUES ('보조 배터리 구매', FALSE);
INSERT INTO todo_table (description, done) VALUES ('커피 챙기기', TRUE);
UPDATE todo_table SET done = 1 WHERE id = 2;
UPDATE todo_table SET description = '심청전 구매', done = 1 WHERE id = 1;
DELETE FROM todo_table WHERE id = 3;
SELECT * FROM todo_table;스크립트의 실행 결과는 다음과 같다.

하위 태스크 7
스크립트 재실행 검증
스크립트를 여러 번 실행했을 때도 안정적으로 동작하는지 확인
스크립트의 첫 문장 DROP DATABASE IF EXISTS todo_db은 기존 데이터베이스가 존재할 때 자동으로 해당 데이터베이스를 삭제한다. 그 결과 02_02_init.sql 스크립트를 반복하더라도 오류 없이 같은 결과를 얻을 수 있다.


