Files
nl-pms-api/init.sql

45 lines
2.9 KiB
MySQL
Raw Normal View History

2026-08-15 07:41:11 +08:00
-- ============================================================
-- 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 表 id0 为未知)
team_id BIGINT NOT NULL DEFAULT 0, -- 上传时所在团队teams 表 id0 为个人)
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;