-- ============================================================ -- nl-pms-api 初始化脚本(MySQL 5.7+ / 8.x) -- 用法:mysql -u root -p < init.sql -- 生产环境服务启动不执行任何建表/迁移(DDL),部署前必须先执行本脚本; -- 仅 dev 环境(config.yaml 里 env: dev)启动时才 AutoMigrate。 -- 与 view 同步服务共用 code_count 库(该库由 view/init.sql 创建,这里兜底建库)。 -- ============================================================ CREATE DATABASE IF NOT EXISTS code_count DEFAULT CHARSET utf8mb4; USE code_count; -- 已上传文件元数据(文件内容落盘在 storage_dir,本表只存相对路径与摘要) -- 归属按 (user_id, team_id) 记录:素材库据此划定"本人 / 团队管理员 / 超管 id=1"的管理范围。 -- 索引名与 gorm AutoMigrate 的默认命名保持一致,避免 dev/prod 两套 schema 漂移。 CREATE TABLE IF NOT EXISTS pms_files( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(191) NOT NULL, -- 存储相对路径,如 2026/08/13/<随机hex>.jpg original VARCHAR(255) NOT NULL DEFAULT '', -- 原始文件名(仅备查) mime VARCHAR(64) NOT NULL DEFAULT '', size BIGINT NOT NULL DEFAULT 0, sha256 CHAR(64) NOT NULL DEFAULT '', -- 内容摘要,同归属秒传去重 user_id BIGINT NOT NULL DEFAULT 0, -- 上传者(code_count 库 users 表 id,0 为未知) team_id BIGINT NOT NULL DEFAULT 0, -- 上传时所在团队(teams 表 id,0 为个人) kind VARCHAR(16) NOT NULL DEFAULT '', -- avatar | content created_at VARCHAR(32) NOT NULL DEFAULT '', UNIQUE KEY idx_pms_files_name(name), KEY idx_pms_files_sha256(sha256), KEY idx_pms_files_user_id(user_id), KEY idx_pms_files_team_id(team_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 旧版本升级:补 team_id 归属列与 user_id/team_id 索引(不存在才添加,重复执行无副作用)。 SET @sql = IF((SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='code_count' AND TABLE_NAME='pms_files' AND COLUMN_NAME='team_id')=0, 'ALTER TABLE pms_files ADD COLUMN team_id BIGINT NOT NULL DEFAULT 0 AFTER user_id', 'SELECT 1'); PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st; SET @sql = IF((SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA='code_count' AND TABLE_NAME='pms_files' AND INDEX_NAME='idx_pms_files_user_id')=0, 'ALTER TABLE pms_files ADD KEY idx_pms_files_user_id(user_id)', 'SELECT 1'); PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st; SET @sql = IF((SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA='code_count' AND TABLE_NAME='pms_files' AND INDEX_NAME='idx_pms_files_team_id')=0, 'ALTER TABLE pms_files ADD KEY idx_pms_files_team_id(team_id)', 'SELECT 1'); PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st;