FiveM 数据库指南:精通 oxmysql 和 MySQL
掌握 FiveM 数据库脚本,使用 oxmysql。查询、预处理语句、异步模式及MySQL性能技巧,每个 FiveM 开发者都应了解。
Agency Scripts
Agency Scripts 创始人兼首席开发者
为什么数据库在 FiveM 中重要
每个严肃的FiveM服务器都需要持久数据存储。玩家库存、银行账户、车辆所有权、电话联系人和工作记录都需在服务器重启后保存。MySQL是FiveM生态中标准数据库系统,MariaDB是性能更优的流行分支。掌握数据库的设置、查询和优化对构建可靠的角色扮演服务器至关重要,能支持数百名同时在线玩家且无数据丢失。
设置 oxmysql
oxmysql资源是FiveM中MySQL连接的现代标准,取代了旧的mysql-async和ghmattimysql库。设置方法是下载最新版本,放入资源文件夹,并在你的配置中设置连接字符串。 server.cfg 带有 set mysql_connection_string. 连接字符串格式为 mysql://user:password@host/database 并支持连接池、超时和SSL的额外参数。确保oxmysql在任何依赖它的资源之前启动,通过将其放在ensure顺序的前面。
编写查询
oxmysql 提供多种查询方法: MySQL.query 适用于返回行的 SELECT 语句, MySQL.update 适用于返回受影响行数的 UPDATE 和 DELETE 语句, MySQL.insert 适用于返回最后插入 ID 的 INSERT 语句,和 MySQL.scalar 用于返回单个值的查询。始终使用带参数的查询,方法为 ? 占位符防止 SQL 注入攻击。请将参数作为表传入第二个参数,而非直接拼接到查询字符串中。
异步模式与Promises
所有 oxmysql 操作均为异步,防止数据库通信时阻塞服务器线程。你可以使用回调风格语法,将函数作为最后一个参数传入,或使用基于 promise 的语法, MySQL.query.await 在 Citizen.CreateThread. await 语法更清晰,避免回调嵌套,但请记住只能在协程内使用。服务器启动数据加载时,请使用 MySQL.ready function 用于确保数据库连接在运行初始查询前已建立。
架构设计最佳实践
设计数据库表时,为频繁查询的列(如玩家标识符)建立适当索引。为每列使用合适数据类型,减少存储并提升查询速度。需要灵活架构时,将 JSON 数据存储于 TEXT 列,但避免频繁在 JSON 结构内查询,以免绕过索引优化。建立相关表间的外键关系以维护数据完整性,且在多条相关插入或更新需同时成功或失败时,考虑使用事务。
优化与维护
通过检查慢查询日志和使用EXPLAIN分析执行计划监控数据库性能。使用Lua表缓存频繁访问数据,减少数据库往返。通过oxmysql配置实现连接池,提升并发查询效率。定期执行数据库维护任务,如优化表和清理已删除玩家的孤立记录。使用mysqldump或自动备份方案每日备份数据库,防止硬件故障或表损坏导致灾难性数据丢失。