Files
coolcoth.com/install/upgrades
Lucanlee 4d36a284ff perf: V0.9.1-0.9.3 性能优化(count/featured 全表→聚合、请求内缓存、二级索引、PSI 未读铃铛)
- V0.9.1 (P0): Model::count() 改 SELECT COUNT(*);新增请求内 identity-map 缓存;
  Product::featured() 改 WHERE+ LIMIT 避免全表
- V0.9.2 (P1): schema.sql 内联二级索引 + install/upgrades/009_perf_indexes.sql 幂等迁移
- V0.9.3 (P1): psi_unread_events() 改 COUNT + JSON_CONTAINS,消除每页 all()+循环
2026-08-08 19:47:35 +08:00
..
2026-08-08 15:53:53 +08:00
2026-08-08 15:53:53 +08:00
2026-08-08 17:19:44 +08:00

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
数据库升级包目录(install/upgrades
================================================

用途
----
将「升级脚本」(.sql 文件)放入本目录后,进入后台「数据库升级」页面,
系统会自动扫描并提示「发现 N 个可升级数据库脚本」,管理员可一键或逐个执行。
每次执行都会在 db_upgrades 表中留下记录(文件名、内容指纹 MD5、执行时间、操作人),
便于追溯与审计。

命名建议
--------
  序号_功能描述.sql     例如  001_add_member_level.sql
序号便于排序与阅读,文件名(不含路径)作为唯一标识写入 db_upgrades。
若同一文件内容被修改后再次放入,系统会识别为「内容已变更」并提示重新升级。

编写规范
--------
1. 仅放 DDL / DML 的标准 MySQL 脚本;多条语句以分号(;)分隔,自动拆分执行。
2. 优先使用「幂等写法」,避免重复执行报错,例如:
     CREATE TABLE IF NOT EXISTS xxx (...);                       -- 全版本支持
     INSERT INTO ... ON DUPLICATE KEY UPDATE ...;                -- 全版本支持
   注意:ALTER TABLE ... ADD COLUMN IF NOT EXISTS 仅 MySQL 8.0.28+ / MariaDB 10.8+ 支持,
         旧版本(含多数宝塔默认的 MySQL 5.7 与 MariaDB 10.4/10.6)会直接报 1064 语法错误。
         跨版本安全的「加列」幂等方式(强烈推荐):
           SET @db = DATABASE();
           SET @has = (SELECT COUNT(*) FROM information_schema.COLUMNS
                       WHERE TABLE_SCHEMA=@db AND TABLE_NAME='yyy' AND COLUMN_NAME='zzz');
           SET @sql = IF(@has=0, 'ALTER TABLE `yyy` ADD COLUMN `zzz` VARCHAR(16) NOT NULL DEFAULT \'x\'', 'SELECT 1');
           PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
3. 不建议在升级包中执行 DROP TABLE / TRUNCATE 等破坏性语句,除非确有必要。
4. 升级前请务必备份数据库。

说明
----
- 本目录下的 examples/ 子目录为示例,不会被自动扫描(仅扫描本目录根下的 *.sql)。
- 想试用示例时,请将 examples/ 中的文件复制到本目录根下再执行。