-- 실행 순서: migration_2026-07-30_ssulbox.sql 의 §1(ssul_content 생성) 이후. -- 대상: MySQL 8.0.16+ (CHECK 가 실제로 강제되는 버전. 운영은 8.4) -- 1. content_id 추가 + FK. -- upload_seq 채번 인덱스 (content_id, social_account_id, upload_seq) 는 -- 선행 컬럼이 content_id 라 FK 인덱스 요건도 겸한다(단독 인덱스 불필요 — -- video_reaction 때는 유니크가 user_uuid 선행이라 단독이 필요했던 것과 다르다). ALTER TABLE `social_upload` ADD COLUMN `content_id` BIGINT NULL COMMENT '썰박스 콘텐츠 id (ADO2 업로드면 NULL)' AFTER `video_id`, ADD CONSTRAINT `fk_social_upload_content` FOREIGN KEY (`content_id`) REFERENCES `ssul_content` (`id`) ON DELETE CASCADE, ADD INDEX `idx_social_upload_content_seq` (`content_id`, `social_account_id`, `upload_seq`); -- 2. video_id 를 nullable 로. 기존 행은 전부 ADO2 업로드라 값이 있어 영향 없다. ALTER TABLE `social_upload` MODIFY COLUMN `video_id` INT NULL COMMENT 'ADO2 영상 id (썰박스 업로드면 NULL)'; -- 3. "정확히 하나만 채워짐" 강제. 이게 없으면 둘 다 NULL 이거나 둘 다 채워진 -- 행이 조용히 생긴다. ALTER TABLE `social_upload` ADD CONSTRAINT `ck_social_upload_one_target` CHECK ((`video_id` IS NULL) <> (`content_id` IS NULL)); -- 4. 과도기 테이블 제거 (로컬 등 이미 만든 환경만 해당. 운영은 애초에 안 만든다). -- ⚠️ 행이 남아 있으면 social_upload 로 이관한 뒤에 지울 것. DROP TABLE IF EXISTS `ssul_social_upload`;