-- 该迁移用于已有数据库;新数据库请直接使用 001_schema.sql 中的最终结构。 -- 执行前应确认 live_session 没有重复活动会话,再创建活动机巢唯一约束。 ALTER TABLE live_session ADD COLUMN requested_by BIGINT NULL COMMENT '请求人用户 ID', ADD COLUMN stop_deadline DATETIME NULL COMMENT '停止截止时间', ADD COLUMN updated_at DATETIME NULL COMMENT '更新时间', ADD COLUMN active_dock_id VARCHAR(64) GENERATED ALWAYS AS ( CASE WHEN phase IN ('starting', 'streaming', 'reconnecting', 'stopping') THEN dock_id ELSE NULL END ) STORED COMMENT '活动机巢标识(生成列)', ADD KEY idx_live_session_dock_phase (dock_id, phase, created_at), ADD KEY idx_live_session_phase_deadline (phase, stop_deadline), ADD UNIQUE KEY uk_live_session_active_dock (active_dock_id); CREATE TABLE IF NOT EXISTS live_viewer_lease ( id BIGINT PRIMARY KEY COMMENT '主键 ID', stream_session_id VARCHAR(128) NOT NULL COMMENT '直播会话 ID', viewer_id BIGINT NOT NULL COMMENT '观看用户 ID', expires_at DATETIME NOT NULL COMMENT '过期时间戳', released_at DATETIME NULL COMMENT '释放时间', created_at DATETIME NULL COMMENT '创建时间', updated_at DATETIME NULL COMMENT '更新时间', UNIQUE KEY uk_live_viewer (stream_session_id, viewer_id), KEY idx_live_lease_expire (stream_session_id, expires_at), KEY idx_live_lease_active (stream_session_id, released_at, expires_at), CONSTRAINT fk_live_lease_session FOREIGN KEY (stream_session_id) REFERENCES live_session(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;