이 게시글은 필자가 공부하고 있는 책 '이것이 MySQL이다'의 261P에 나오는 실습 내용을 기록하기 위한 것이다. 주어진 상황은 영화 대본과 영상을 담는 데이터베이스를 간단하게 만들어보는 것이며, 데이터 형식과 대용량 파일 데이터 입력을 연습하는 것이 목적이다. 준비물로는 대본에 해당하는 긴글이 적힌 '.txt' 파일과 동영상 파일 '.mp4'가 필요하다. 작성한 SQL 문을 전반적으로 보자.
CREATE DATABASE moviedb ;
USE moviedb ;
CREATE TABLE movietbl
(movie_id INT,
movie_title VARCHAR(30),
movie_director VARCHAR(20),
movie_star VARCHAR(20),
movie_script LONGTEXT,
movie_film LONGBLOB
) DEFAULT CHARSET=utf8mb4 ;
INSERT INTO movietbl VALUES (1, '쉰들러 리스트', '스필버그', '리암 니슨',
LOAD_FILE('C:\SQL\movies\Schindler.txt'),LOAD_FILE('C:/SQL/movies/Schindler.mp4')
) ; /* LOAD FILE을 위한 파일을 바탕화면에 넣고 경로를 지정했는데 한글명 폴더에서 오류가 난다.
파일 경로는 최대한 간편한 위치를 설정하고 경로상에 한글이 포함이 되지 않도록 하자 */
SELECT * FROM movietbl ; -- movie_script와 mocie_film 칸에 NULL이 뜬다
SHOW variables LIKE 'max_allowed_packet';
SHOW variables LIKE 'secure_file_priv' ;
-- 최대 패킷 크기를 수정하고, 파일 업로드 및 다운로드 허용 파일을 재설정한다
-- XXXXXXXXXXXXXXXXXXXXXXXXXXXX --
USE moviedb ;
TRUNCATE movietbl ; -- 기존 행 모두 제거
INSERT INTO movietbl VALUES ( 1, '쉰들러 리스트', '스필버그', '리암 니슨',
LOAD_FILE('C:/SQL/Movies/Schindler.txt'),
LOAD_FILE('C:/SQL/Movies/Schindler.mp4')
);
INSERT INTO movietbl VALUES ( 2, '쇼생크 탈출', '프랭크 다라본트', '팀 로빈스',
LOAD_FILE('C:/SQL/Movies/Shawshank.txt'),
LOAD_FILE('C:/SQL/Movies/Shawshank.mp4')
);
INSERT INTO movietbl VALUES ( 3, '라스트 모히칸', '마이클 만', '다니엘 데이 루이스',
LOAD_FILE('C:/SQL/Movies/Mohican.txt'),
LOAD_FILE('C:/SQL/Movies/Mohican.mp4')
);
SELECT * FROM movietbl ;
-- 데이터가 잘 입력된 것을 확인할 수 있다
-- LONGTEXT 형식인 파일 DB에서 내려받기
SELECT movie_script FROM movietbl WHERE movie_id=1
INTO OUTFILE 'C:/SQL/Movies/Schindler_out.txt'
LINES TERMINATED BY '\\n' ;
-- LONGBLOB 형식의 파일 DB에서 내려받기
SELECT movie_film FROM movietbl WHERE movie_id=3
INTO DUMPFILE 'C:/SQL/Movies/Mohican_out.mp4' ;
해당 실습에 간단한 피드백을 남겨보자. 먼저, MySQL 시스템에서 최대 패킷 크기를 재설정하고 파일 업로드/다운로드 가능 파일을 설정하는 과정이 필요한 경우를 볼 수 있었다. 대용량 파일을 다루는 DB에서는 어떤 작업이 필요한지 알 수 있어서 유용했다.
막혔던 부분으로는 텍스트 파일과 동영상 파일을 실습에서 재시하는 공간에 저장해두지 않고 임의대로 바탕화면에 저장해두었는데, 최대 크기 허용치를 설정하는 과정에서 경로 입력에 오류가 발생해 원인을 찾느라 시간을 소모했다. DB에 입출력할 파일을 저장해둘 때에는 경로가 영문이고 간단한 곳에 저장해두어야 편리하다는 것을 배웠다. (기존에는 경로상에 '바탕화면'인 부분이 있어서 MySQL 시스템에서 메세지 없이 오류가 났다.)
Database를 구축하고 데이터를 업로드만 하는 것이 아닌 파일 형태의 데이터를 다운로드 하는 SQL도 배울 수 있어 유익한 실습이었다.
'IT Self-study > MySQL & Database' 카테고리의 다른 글
| JOIN (2) | 2025.01.10 |
|---|---|
| 피벗(Pivot) 구현 (0) | 2025.01.08 |
| 변수 지정 및 사용 예시 (0) | 2025.01.08 |
| 데이터 타입 변경/ MySQL 내장함수 (0) | 2025.01.08 |
| 비재귀적 CTE(Common Table Expression): WITH (0) | 2025.01.08 |