015_fix_unique_constraint.sql 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. -- MariaDB 호환 DDL
  2. -- 기존 제약조건 확인 및 삭제
  3. SET @constraint_name = (
  4. SELECT CONSTRAINT_NAME
  5. FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  6. WHERE TABLE_SCHEMA = DATABASE()
  7. AND TABLE_NAME = 'VENDOR_INFLUENCER_PARTNERSHIP'
  8. AND COLUMN_NAME = 'VENDOR_SEQ'
  9. AND REFERENCED_TABLE_NAME IS NULL
  10. AND CONSTRAINT_NAME != 'PRIMARY'
  11. LIMIT 1
  12. );
  13. SET @sql = IF(@constraint_name IS NOT NULL,
  14. CONCAT('ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP DROP INDEX ', @constraint_name),
  15. 'SELECT "No unique constraint found to drop"'
  16. );
  17. PREPARE stmt FROM @sql;
  18. EXECUTE stmt;
  19. DEALLOCATE PREPARE stmt;
  20. -- 새로운 제약조건 추가
  21. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  22. ADD CONSTRAINT unique_active_partnership
  23. UNIQUE KEY (VENDOR_SEQ, INFLUENCER_SEQ, IS_ACTIVE);
  24. -- 기존 데이터 정리 (선택적)
  25. -- 1. 각 벤더-인플루언서 조합에 대해 가장 최근의 비활성 레코드만 남기고 삭제
  26. DELETE p1 FROM VENDOR_INFLUENCER_PARTNERSHIP p1
  27. INNER JOIN VENDOR_INFLUENCER_PARTNERSHIP p2
  28. WHERE p1.VENDOR_SEQ = p2.VENDOR_SEQ
  29. AND p1.INFLUENCER_SEQ = p2.INFLUENCER_SEQ
  30. AND p1.IS_ACTIVE = 'N'
  31. AND p2.IS_ACTIVE = 'N'
  32. AND p1.SEQ < p2.SEQ;