-- 音乐总分类 / 子分类 + 曲目多对多。种子:首页 + 分类1/2/3;按 demo 曲名分配到子分类。 CREATE TABLE IF NOT EXISTS t_music_categories ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '分类自增 id', parent_id BIGINT NULL COMMENT 'NULL=总分类;非空=所属总分类 id', name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '分类名称(后台可改)', sort_order INT NOT NULL DEFAULT 0 COMMENT '越小越靠前', enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=启用', created_at DATETIME(3) NOT NULL COMMENT '创建时间', updated_at DATETIME(3) NOT NULL COMMENT '更新时间', KEY idx_music_cat_parent (parent_id, enabled, sort_order, id), KEY idx_music_cat_name (name) ) COMMENT='音乐总分类与子分类'; CREATE TABLE IF NOT EXISTS t_music_category_tracks ( category_id BIGINT NOT NULL COMMENT '分类 id', track_id BIGINT NOT NULL COMMENT '曲目 id', created_at DATETIME(3) NOT NULL COMMENT '绑定时间', PRIMARY KEY (category_id, track_id), KEY idx_mct_track (track_id) ) COMMENT='曲目与分类多对多(同一曲可属多个分类)'; INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at) SELECT NULL, '首页', 0, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3) FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM t_music_categories WHERE parent_id IS NULL AND name = '首页' ); INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at) SELECT p.id, '分类1', 1, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3) FROM t_music_categories p WHERE p.parent_id IS NULL AND p.name = '首页' AND NOT EXISTS ( SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类1' ); INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at) SELECT p.id, '分类2', 2, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3) FROM t_music_categories p WHERE p.parent_id IS NULL AND p.name = '首页' AND NOT EXISTS ( SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类2' ); INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at) SELECT p.id, '分类3', 3, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3) FROM t_music_categories p WHERE p.parent_id IS NULL AND p.name = '首页' AND NOT EXISTS ( SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类3' ); INSERT INTO t_music_category_tracks (category_id, track_id, created_at) SELECT c.id, t.id, CURRENT_TIMESTAMP(3) FROM t_music_categories c JOIN t_music_tracks t ON t.title IN ('晨光微风', '城市夜行', '雨巷漫步', '山间回响') WHERE c.name = '分类1' AND c.parent_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id ); INSERT INTO t_music_category_tracks (category_id, track_id, created_at) SELECT c.id, t.id, CURRENT_TIMESTAMP(3) FROM t_music_categories c JOIN t_music_tracks t ON t.title IN ('海边日落', '咖啡馆时光', '极光之夜', '纸飞机') WHERE c.name = '分类2' AND c.parent_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id ); INSERT INTO t_music_category_tracks (category_id, track_id, created_at) SELECT c.id, t.id, CURRENT_TIMESTAMP(3) FROM t_music_categories c JOIN t_music_tracks t ON t.title IN ('极光之夜', '星河入梦', '旅途序曲', '晨光微风') WHERE c.name = '分类3' AND c.parent_id IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id );