| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- # 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
- ---
|