sql-rules.mdc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. # SQL 작성 규칙
  2. ## 1. DDL 작성 규칙
  3. ### 1.1 컬럼 추가
  4. - ALTER TABLE 구문은 항상 단일 컬럼 단위로 분리하여 작성
  5. ```sql
  6. -- 좋은 예:
  7. ALTER TABLE USER_LIST
  8. ADD COLUMN REGION VARCHAR(50) COMMENT '지역' AFTER EMAIL;
  9. ALTER TABLE USER_LIST
  10. ADD COLUMN DESCRIPTION TEXT COMMENT '소개글' AFTER ENGAGEMENT_RATE;
  11. -- 나쁜 예:
  12. ALTER TABLE USER_LIST
  13. ADD COLUMN REGION VARCHAR(50) COMMENT '지역' AFTER EMAIL,
  14. ADD COLUMN DESCRIPTION TEXT COMMENT '소개글' AFTER ENGAGEMENT_RATE;
  15. ```
  16. ### 1.2 단계별 실행
  17. - 각 DDL 구문은 독립적으로 실행 가능하도록 작성
  18. - 주석으로 단계 구분을 명확히 표시
  19. ```sql
  20. -- 1단계: REGION 컬럼 추가
  21. ALTER TABLE USER_LIST ...
  22. -- 2단계: 인덱스 추가
  23. ALTER TABLE USER_LIST ...
  24. ```
  25. ### 1.3 안전한 데이터 업데이트
  26. - WHERE 절 조건은 신중하게 설정
  27. - 불필요한 제약조건 피하기 (예: USER_TYPE이나 PRIMARY_CATEGORY로 제한하지 않기)
  28. - NULL 값 처리 로직 포함
  29. ```sql
  30. -- 좋은 예:
  31. DESCRIPTION = CASE
  32. WHEN PRIMARY_CATEGORY IS NOT NULL THEN
  33. CASE
  34. WHEN PRIMARY_CATEGORY = 'FASHION_BEAUTY' THEN '패션 크리에이터'
  35. ELSE '일반 크리에이터'
  36. END
  37. ELSE '프로필 소개가 없습니다.'
  38. END
  39. ```
  40. ## 2. MySQL 특화 문법
  41. ### 2.1 문자열 연결
  42. - MySQL에서는 `||` 연산자 대신 CONCAT() 함수 사용
  43. ```sql
  44. -- 좋은 예:
  45. CONCAT('prefix_', column_name, '_suffix')
  46. -- 나쁜 예:
  47. 'prefix_' || column_name || '_suffix'
  48. ```
  49. ### 2.2 JSON 데이터 처리
  50. - JSON 문자열은 반드시 CONCAT() 함수로 조합
  51. - 이스케이프 문자 처리 주의
  52. ```sql
  53. -- 좋은 예:
  54. CONCAT('{"key":"', value, '"}')
  55. -- 나쁜 예:
  56. '{"key":"' || value || '"}'
  57. ```
  58. ## 3. DBeaver 최적화
  59. ### 3.1 실행 계획
  60. - 각 SQL 구문은 독립적으로 실행 가능하도록 분리
  61. - 트랜잭션이 필요한 경우 명시적으로 표시
  62. - 실행 순서를 주석으로 명확히 표시
  63. ### 3.2 에러 처리
  64. - 컬럼 존재 여부 확인이 필요한 경우 IF NOT EXISTS 사용
  65. ```sql
  66. ALTER TABLE table_name
  67. ADD COLUMN IF NOT EXISTS column_name data_type;
  68. ```
  69. ## 4. 데이터 마이그레이션
  70. ### 4.1 데이터 업데이트
  71. - 대량 데이터 업데이트 시 LIMIT 사용 고려
  72. - 인덱스 영향도 고려
  73. - 롤백 계획 포함
  74. ### 4.2 테스트 데이터
  75. - 의미 있는 테스트 데이터 생성
  76. - SEQ나 ID 값을 활용한 동적 데이터 생성
  77. - NULL 값 처리 로직 포함
  78. ## 5. 성능 최적화
  79. ### 5.1 인덱스
  80. - 조회 패턴에 맞는 인덱스 설계
  81. - 복합 인덱스 순서 고려
  82. - 불필요한 인덱스 제거
  83. ### 5.2 쿼리 최적화
  84. - 대량 데이터 처리 시 배치 처리 고려
  85. - 임시 테이블 사용 최소화
  86. - 조인 성능 고려
  87. ## 6. 문서화
  88. ### 6.1 주석 처리
  89. - 각 SQL 구문의 목적 명시
  90. - 주의사항이나 제약사항 표시
  91. - 실행 순서와 종속성 명시
  92. ### 6.2 백업 계획
  93. - 데이터 변경 전 백업 방법 명시
  94. - 롤백 스크립트 준비
  95. - 테스트 환경에서 검증 후 운영 반영
  96. description:
  97. globs:
  98. alwaysApply: false
  99. ---