Python/django

Django Migration 사용 안하고 DDL 사용하기(1)

알면 알 수록 재밌다! 2023. 5. 16. 15:17

DDL (Data Define Language)

DDL은 데이터베이스의 Schema(형태)를 정의할 수 있는 쿼리문을 의미합니다. 여기에 CREATE, ALTER, DROP 이 대표적인 쿼리문이 있습니다. DDL 에 속하는 쿼리문의 이름에서도 알 수 있듯 데이터를 구성하는 논리적인 구조(데이터베이스 또는 테이블)을 추가하고 수정하고 삭제할 수 있습니다. 또한 메타데이터(데이터에 대한 데이터)를 다루는 쿼리문이라고 할 수 있습니다.

 

 

DDL을 쓰는 이유

Django의 마이그레이션 도구는 변경 사항을 자동으로 감지하고 데이터베이스에 적용하는 편리한 방법을 제공하지만, 때로는 변경 사항을 세밀하게 제어해야 할 수 있습니다. DDL을 사용하면 데이터베이스 스키마를 직접 정의하고 원하는 대로 변경할 수 있습니다.

 

DDL 예시

우선 test.sql 파일을 만듭니다.

/*!40100 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40100 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40100 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

SET NAMES utf8mb4;

/*!40013 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40100 SET @OLD_SQL_MODE='NO_AUTO_VALUE_ON_ZERO', SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40100 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

위처럼 MySQL의 주석은 보통 /* / 형식으로 사용되지만, 조건부 주석은 /! */ 형식으로 사용됩니다. 이는 일반적인 주석으로 처리되지 않고, MySQL 서버에게 특정 버전 이상에서만 해당 SQL 문을 실행하도록 지시합니다.

 

SET NAMES utf8mb4;은 MySQL에서 사용되는 명령문으로, 현재 세션의 문자 집합(character set)을 utf8mb4로 설정하는 역할을 합니다.

 

DROP TABLE IF EXISTS `pizza`;

CREATE TABLE `pizza` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `created` datetime(6) NOT NULL,
  `updated` datetime(6) NOT NULL,
  `kind` varchar(16) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `pizza_created_9bf2b81d` (`created`),
) ENGINE=InnoDB AUTO_INCREMENT=166 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

LOCK TABLES `pizza` WRITE;
/*!40000 ALTER TABLE `pizza` DISABLE KEYS */;

INSERT INTO `pizza` (`id`, `created`, `updated`, `kind`)
VALUES
  (1,'2022-10-28 10:27:54.828629','2022-10-28 10:27:54.828662','콤비네이션'),

/*!40000 ALTER TABLE `pizza` ENABLE KEYS */;
UNLOCK TABLES;

위처럼 코드를 test.sql 아래에 집어넣습니다.

SQL 언어를 사용해 스키마를 구성한 것입니다.

 

그 다음 dump.sh 파일을 만듭니다.

mysql -u root -e "CREATE SCHEMA \`{DB이름}\`"
mysql -u root {DB이름} < /test.sql
mysql -u root {DB이름} < /test.sql

 

dump.sh 실행방법

#dump.sh 파일이 위치한 디렉토리로 이동
# 실행권한 부여
chmod +x dump.sh 명령어를 사용하여 실행 권한을 부여

# 실행
./dump.sh

 

그럼 DB에 테이블과 데이터가 생성됩니다.