012_add_rating_column_fixed.sql 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. -- 012_add_rating_column_fixed.sql
  2. -- USER_LIST 테이블에 RATING 컬럼 추가 (MariaDB 호환, Prepared Statement 충돌 방지)
  3. -- 1. RATING 컬럼이 이미 존재하는지 확인 후 추가
  4. SET @sql_column = (
  5. SELECT IF(
  6. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
  7. WHERE TABLE_SCHEMA = DATABASE()
  8. AND TABLE_NAME = 'USER_LIST'
  9. AND COLUMN_NAME = 'RATING') = 0,
  10. 'ALTER TABLE USER_LIST ADD COLUMN RATING DECIMAL(3,1) DEFAULT 0.0 COMMENT "사용자 평점 (0.0~5.0)"',
  11. 'SELECT "RATING 컬럼이 이미 존재합니다" as message'
  12. )
  13. );
  14. PREPARE stmt_column FROM @sql_column;
  15. EXECUTE stmt_column;
  16. DEALLOCATE PREPARE stmt_column;
  17. -- 2. RATING 컬럼 인덱스 생성 (존재하지 않을 경우에만)
  18. SET @sql_index = (
  19. SELECT IF(
  20. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  21. WHERE TABLE_SCHEMA = DATABASE()
  22. AND TABLE_NAME = 'USER_LIST'
  23. AND INDEX_NAME = 'idx_user_rating') = 0,
  24. 'CREATE INDEX idx_user_rating ON USER_LIST (RATING DESC)',
  25. 'SELECT "idx_user_rating 인덱스가 이미 존재합니다" as message'
  26. )
  27. );
  28. PREPARE stmt_index FROM @sql_index;
  29. EXECUTE stmt_index;
  30. DEALLOCATE PREPARE stmt_index;
  31. -- 3. RATING 기본값 업데이트 (NULL인 경우에만)
  32. UPDATE USER_LIST
  33. SET RATING = 0.0
  34. WHERE RATING IS NULL;
  35. -- 4. 성공 메시지
  36. SELECT 'USER_LIST 테이블 RATING 컬럼 추가 완료' as result;
  37. -- 5. 검증: 컬럼 생성 확인
  38. SELECT
  39. COLUMN_NAME,
  40. DATA_TYPE,
  41. IS_NULLABLE,
  42. COLUMN_DEFAULT,
  43. COLUMN_COMMENT
  44. FROM INFORMATION_SCHEMA.COLUMNS
  45. WHERE TABLE_SCHEMA = DATABASE()
  46. AND TABLE_NAME = 'USER_LIST'
  47. AND COLUMN_NAME = 'RATING';