数据库升级包目录（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/ 中的文件复制到本目录根下再执行。
