📋 表概述

updates 表是 AzerothCore 数据库版本管理系统的核心。记录了所有已成功应用到 characters 库的 SQL 更新文件,包括文件名、SHA1 哈希、应用时间、执行速度和状态。用于确保数据库迁移被正确执行且不重复应用。

📊 表结构

字段名数据类型默认值说明
namevarchar(200)(无)SQL 更新文件名(含扩展名)
hashchar(40)''SQL 文件的 SHA1 哈希值
stateenum'RELEASED'更新状态:RELEASED/CUSTOM/MODULE/ARCHIVED/PENDING
timestamptimestampCURRENT_TIMESTAMPSQL 应用的时间戳
speedint UNSIGNED0SQL 执行耗时(毫秒)

🔍 重要字段详解

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 会检测到该更新未应用并重新执行。