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에 테이블과 데이터가 생성됩니다.