# SQL 작성 규칙 ## 1. DDL 작성 규칙 ### 1.1 컬럼 추가 - ALTER TABLE 구문은 항상 단일 컬럼 단위로 분리하여 작성 ```sql -- 좋은 예: ALTER TABLE USER_LIST ADD COLUMN REGION VARCHAR(50) COMMENT '지역' AFTER EMAIL; ALTER TABLE USER_LIST ADD COLUMN DESCRIPTION TEXT COMMENT '소개글' AFTER ENGAGEMENT_RATE; -- 나쁜 예: ALTER TABLE USER_LIST ADD COLUMN REGION VARCHAR(50) COMMENT '지역' AFTER EMAIL, ADD COLUMN DESCRIPTION TEXT COMMENT '소개글' AFTER ENGAGEMENT_RATE; ``` ### 1.2 단계별 실행 - 각 DDL 구문은 독립적으로 실행 가능하도록 작성 - 주석으로 단계 구분을 명확히 표시 ```sql -- 1단계: REGION 컬럼 추가 ALTER TABLE USER_LIST ... -- 2단계: 인덱스 추가 ALTER TABLE USER_LIST ... ``` ### 1.3 안전한 데이터 업데이트 - WHERE 절 조건은 신중하게 설정 - 불필요한 제약조건 피하기 (예: USER_TYPE이나 PRIMARY_CATEGORY로 제한하지 않기) - NULL 값 처리 로직 포함 ```sql -- 좋은 예: DESCRIPTION = CASE WHEN PRIMARY_CATEGORY IS NOT NULL THEN CASE WHEN PRIMARY_CATEGORY = 'FASHION_BEAUTY' THEN '패션 크리에이터' ELSE '일반 크리에이터' END ELSE '프로필 소개가 없습니다.' END ``` ## 2. MySQL 특화 문법 ### 2.1 문자열 연결 - MySQL에서는 `||` 연산자 대신 CONCAT() 함수 사용 ```sql -- 좋은 예: CONCAT('prefix_', column_name, '_suffix') -- 나쁜 예: 'prefix_' || column_name || '_suffix' ``` ### 2.2 JSON 데이터 처리 - JSON 문자열은 반드시 CONCAT() 함수로 조합 - 이스케이프 문자 처리 주의 ```sql -- 좋은 예: CONCAT('{"key":"', value, '"}') -- 나쁜 예: '{"key":"' || value || '"}' ``` ## 3. DBeaver 최적화 ### 3.1 실행 계획 - 각 SQL 구문은 독립적으로 실행 가능하도록 분리 - 트랜잭션이 필요한 경우 명시적으로 표시 - 실행 순서를 주석으로 명확히 표시 ### 3.2 에러 처리 - 컬럼 존재 여부 확인이 필요한 경우 IF NOT EXISTS 사용 ```sql ALTER TABLE table_name ADD COLUMN IF NOT EXISTS column_name data_type; ``` ## 4. 데이터 마이그레이션 ### 4.1 데이터 업데이트 - 대량 데이터 업데이트 시 LIMIT 사용 고려 - 인덱스 영향도 고려 - 롤백 계획 포함 ### 4.2 테스트 데이터 - 의미 있는 테스트 데이터 생성 - SEQ나 ID 값을 활용한 동적 데이터 생성 - NULL 값 처리 로직 포함 ## 5. 성능 최적화 ### 5.1 인덱스 - 조회 패턴에 맞는 인덱스 설계 - 복합 인덱스 순서 고려 - 불필요한 인덱스 제거 ### 5.2 쿼리 최적화 - 대량 데이터 처리 시 배치 처리 고려 - 임시 테이블 사용 최소화 - 조인 성능 고려 ## 6. 문서화 ### 6.1 주석 처리 - 각 SQL 구문의 목적 명시 - 주의사항이나 제약사항 표시 - 실행 순서와 종속성 명시 ### 6.2 백업 계획 - 데이터 변경 전 백업 방법 명시 - 롤백 스크립트 준비 - 테스트 환경에서 검증 후 운영 반영 description: globs: alwaysApply: false ---