AI Core

Datenbank

@aicore-fivem/mysql, typisierte Tabellen und ai-mysql für Skripte von Drittanbietern.

AI Core hat eine eigene Datenbank-Engine, @aicore-fivem/mysql. Jede ai-*-Ressource, die die Datenbank nutzt, betreibt einen kleinen Pool in ihrem eigenen Prozess (kein Export-Umweg pro Abfrage); ai-mysql ersetzt oxmysql, mysql-async und ghmattimysql, sodass Skripte von Drittanbietern ihre API behalten.

Tabellen

Eine Ressource hält ihre Tabellen in sql/main.sql und installiert sie beim Start:

createDatabaseTables(ResourceName, "sql/main.sql");

Fehlende Tabellen werden angelegt und fehlende Spalten ergänzt; vorhandene werden nie gelöscht oder geändert. Jede Tabelle hat die Ressource als Präfix (ai_<name>_...), einen Primärschlüssel und nutzt utf8mb4_unicode_ci.

Abfragen

Der Build erzeugt aus dem SQL typisierte Zeilentypen (resource/server/tables.ts). Einfache Abfragen nutzen sie:

export const db = tables<Tables, TableInserts>();
const rows = await db.select("ai_garages_vehicles", ["id", "plate"], { owner }, { limit: 50 });

Joins, Bereiche, Upserts und Massenanweisungen bleiben reines SQL mit Platzhaltern:

await mysql.query("UPDATE ai_x SET count = count - ? WHERE id = ? AND count >= ?", [n, id, n]);

Regeln

  • Platzhalter für jeden Wert; Bezeichner nur aus einer festen Liste.
  • Geld ist eine Ganzzahl, Zeiten sind UTC-DATETIME, Flags sind TINYINT(1).
  • Spielerdaten werden einmal beim Laden gelesen und im Speicher gehalten; häufige Werte schreibt ein periodischer Flush, kritische (Geld, Items) in einer bedingten Anweisung oder Transaktion.
  • Massenschreibvorgänge sind eine Anweisung pro Block, nie eine pro Zeile.
  • Jede Ressource, die die Datenbank nutzt, braucht add_convar_permission <resource> read mysql_connection_string in env.cfg.

Auf dieser Seite