更新数据库记录

Update database records

这个问题我想问很久了。您可以在服务器 运行 时进行数据库记录更新吗?实际上问题是不同的,是否建议使用服务器 运行 进行这些更新,或者关闭服务器,进行修改然后再次打开它是否更可取?谢谢你。 对于某些人来说,这似乎是世界上最愚蠢的问题,但他们甚至无法想象我见过多少次人们用服务器进行日志更新 运行.

我尝试用一​​些 npc 文本更改来更新数据库,而服务器仍然是 运行,但是更新根本没有反映出来,所以我不得不重新触发 docker-compose又起来了。

也许对应用程序的其他部分有效,但对文本表格无效。这可能是因为在服务器启动时加载了一次静态的字符数据。

如果有这个功能会很棒,因为它会增加调试速度。

对数据库的任何更改都需要重新加载世界数据库以反映更改,因此如果您在服务器 运行 时执行此操作并不是真正的问题。但是,应用更改或大量更新等更改将锁定 table,直到应用更改。

也就是说,最好在服务器关闭的情况下执行此操作,防止错误或任何类型的玩家数据丢失。

关闭服务器以进行大更新,否则您可能会遇到不需要的问题(当核心同时 运行 查询时)

最好在服务器 离线.

时对数据库进行更改

不过,有一组table支持实时重载。这意味着您可以修改它们,然后使用 .reload * GM commands 重新加载它们的内容。此类命令在此文件中实现:

请注意,虽然大多数 .reload * 命令会重新加载整个 table,但在某些情况下,例如 reload creature_template XXX 您只能重新加载特定的 [=13] =] 实体(所以你不能一次重新加载整个 table)。

通常,编辑 .reload * 命令支持的 table 的内容被认为是足够安全的。

还有其他情况,虽然编辑 table 内容仍然是安全的,但它们不会立即反映在核心中。例如,如果您更改角色的帐户(通过更改 acore_characters 数据库的 characters table 中的 account 字段,更改会在下次帐户登录时反映出来。

最后,在某些情况下,编辑数据库值可能会导致不一致的行为。例如,服务器可能无法及时加载已手动对数据库进行的新更改,然后将其覆盖。因此手动更改将丢失。如果您有疑问,最好先在测试环境中进行试验,然后再将更改应用到生产环境。