</>liveDevDocs
FiveM

Veritabanı

oxmysql ile kullandığım şemalar, indexler ve migration kalıpları.

Tablo şeması

sql/player_vehicles.sql
CREATE TABLE IF NOT EXISTS `player_vehicles` (
  `id`         INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `citizenid`  VARCHAR(50)  NOT NULL,
  `plate`      VARCHAR(12)  NOT NULL,
  `label`      VARCHAR(64)  NOT NULL,
  `mods`       LONGTEXT     NULL,
  `stored`     TINYINT(1)   NOT NULL DEFAULT 1,
  `created_at` TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_plate` (`plate`),
  KEY `idx_owner` (`citizenid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Sık kullanılan sorgular

-- Oyuncunun garajdaki araçları
SELECT plate, label, mods
FROM player_vehicles
WHERE citizenid = ? AND stored = 1
ORDER BY created_at DESC;

-- Aracı dışarı çıkar
UPDATE player_vehicles SET stored = 0 WHERE plate = ?;

-- Upsert (varsa güncelle, yoksa ekle)
INSERT INTO player_vehicles (citizenid, plate, label)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE label = VALUES(label);

Migration ekleme (diff)

Var olan tabloya kolon eklerken diff ile neyi değiştirdiğimi işaretliyorum:

ALTER TABLE player_vehicles
  ADD COLUMN fuel TINYINT UNSIGNED NOT NULL DEFAULT 100; 

Index'i unutma

Sık WHERE ile sorguladığın kolonlara (citizenid, plate) index koy. Yüksek oyuncu sayısında fark uçurum olur.

On this page