📖 updates 表
数据库更新记录表,记录所有已应用到 characters 数据库的 SQL 更新文件。
📋 表概述
updates 表是 AzerothCore 数据库版本管理系统的核心。记录了所有已成功应用到 characters 库的 SQL 更新文件,包括文件名、SHA1 哈希、应用时间、执行速度和状态。用于确保数据库迁移被正确执行且不重复应用。
- 主键:(name)
- 引擎:InnoDB
- 关联表:updates_include
📊 表结构
| 字段名 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|
name | varchar(200) | (无) | SQL 更新文件名(含扩展名) |
hash | char(40) | '' | SQL 文件的 SHA1 哈希值 |
state | enum | 'RELEASED' | 更新状态:RELEASED/CUSTOM/MODULE/ARCHIVED/PENDING |
timestamp | timestamp | CURRENT_TIMESTAMP | SQL 应用的时间戳 |
speed | int UNSIGNED | 0 | SQL 执行耗时(毫秒) |
🔍 重要字段详解
state — 更新状态
五种状态:RELEASED(官方发布更新,已应用)、CUSTOM(自定义更新)、MODULE(模块更新)、ARCHIVED(已归档,不再需要)、PENDING(待应用)。状态决定了 DBUpdater 如何处理该更新。
hash — 完整性校验
SQL 文件的 SHA1 哈希值。DBUpdater 通过比较文件内容与 hash 来检测 SQL 文件是否被修改过。若 hash 不匹配,不会跳过该更新(按内容重新判断)。
speed — 执行耗时
记录 SQL 更新执行所耗费的时间(毫秒),用于性能监控。通过此字段可以识别哪些数据库迁移操作耗时过长。
💡 SQL查询示例
查看最近应用的10个数据库更新
SELECT name, state, timestamp, speed
FROM updates
ORDER BY timestamp DESC
LIMIT 10;
统计各状态的更新数量
SELECT state, COUNT(*) AS 数量
FROM updates
GROUP BY state;
❓ 常见问题
Q: 如果删除 updates 表中的记录会怎样?
DBUpdater 会认为这些 SQL 文件尚未执行,并尝试再次执行。这可能导致错误(如表已存在)。正常情况下不应手动修改此表。
Q: 如何强制重新执行某个 SQL 更新?
将对应记录的 state 改为 PENDING 或删除该记录,然后重新运行 worldserver。DBUpdater 会检测到该更新未应用并重新执行。