016_fix_terminated_status.sql 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. -- 1. 기존 제약조건 삭제
  2. SET @constraint_name = (
  3. SELECT CONSTRAINT_NAME
  4. FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  5. WHERE TABLE_SCHEMA = DATABASE()
  6. AND TABLE_NAME = 'VENDOR_INFLUENCER_PARTNERSHIP'
  7. AND COLUMN_NAME = 'VENDOR_SEQ'
  8. AND REFERENCED_TABLE_NAME IS NULL
  9. AND CONSTRAINT_NAME = 'unique_active_partnership'
  10. LIMIT 1
  11. );
  12. SET @sql = IF(@constraint_name IS NOT NULL,
  13. CONCAT('ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP DROP INDEX ', @constraint_name),
  14. 'SELECT "No constraint found to drop"'
  15. );
  16. PREPARE stmt FROM @sql;
  17. EXECUTE stmt;
  18. DEALLOCATE PREPARE stmt;
  19. -- 2. 데이터 정리
  20. -- 2.1 TERMINATED 상태인 레코드는 모두 비활성화
  21. UPDATE VENDOR_INFLUENCER_PARTNERSHIP
  22. SET IS_ACTIVE = 'N'
  23. WHERE STATUS = 'TERMINATED';
  24. -- 2.2 각 벤더-인플루언서 조합에 대해 가장 최근의 비활성 레코드만 남기고 삭제
  25. DELETE p1 FROM VENDOR_INFLUENCER_PARTNERSHIP p1
  26. INNER JOIN VENDOR_INFLUENCER_PARTNERSHIP p2
  27. WHERE p1.VENDOR_SEQ = p2.VENDOR_SEQ
  28. AND p1.INFLUENCER_SEQ = p2.INFLUENCER_SEQ
  29. AND p1.IS_ACTIVE = 'N'
  30. AND p2.IS_ACTIVE = 'N'
  31. AND p1.SEQ < p2.SEQ;
  32. -- 3. 데이터 상태 확인
  33. SELECT SEQ, VENDOR_SEQ, INFLUENCER_SEQ, STATUS, IS_ACTIVE, REQUEST_TYPE,
  34. REQUEST_DATE, RESPONSE_DATE, PARTNERSHIP_START_DATE, PARTNERSHIP_END_DATE
  35. FROM VENDOR_INFLUENCER_PARTNERSHIP
  36. WHERE VENDOR_SEQ = 8 AND INFLUENCER_SEQ = 23
  37. ORDER BY SEQ DESC;
  38. -- 4. 새로운 제약조건 추가
  39. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  40. ADD CONSTRAINT unique_active_partnership
  41. UNIQUE KEY (VENDOR_SEQ, INFLUENCER_SEQ, IS_ACTIVE);