MySQL JSON Sütunları: Ne Zaman Kullanılır, Nasıl Sorgulanır?
Web Geliştirme üzerinde çalışırken MySQL JSON Sütunları: Ne Zaman Kullanılır, Nasıl Sorgulanır? konusunu doğru kavramak hem zaman kazandırır hem de ileride çıkabilecek sorunların önüne geçer. Aşağıda konunun özünü 5 başlık altında topladık.
Web Geliştirme üzerinde çalışırken MySQL JSON Sütunları: Ne Zaman Kullanılır, Nasıl Sorgulanır? konusunu doğru kavramak hem zaman kazandırır hem de ileride çıkabilecek sorunların önüne geçer. Aşağıda konunun özünü 5 başlık altında topladık.
Konuya genel bakış
Ürün özellikleri, kullanıcı tercihleri ya da dış servis yanıtları gibi yapısı kayıttan kayda değişen veriler için her alanı ayrı sütun yapmak pratik değildir. MySQL 5.7 ve MariaDB 10.2 ile gelen JSON desteği bu veriyi tek sütunda saklamayı ve içinden sorgulamayı sağlar; ama her veri için doğru tercih değildir.
Öne çıkan noktalar
- Doğru kullanım alanı: Yapısı değişken ve nadiren filtrelenen veriler için uygundur; sık sorgulanan ve ilişki kurulan alanlar normal sütun olmalıdır.
- Oluşturulmuş sütun ile indeks: JSON içindeki bir alanda arama yapacaksanız onu STORED oluşturulmuş sütuna çıkarıp indeksleyin.
- Taşınabilir fonksiyonlar: MariaDB, MySQL'deki -> ve ->> işleçlerini desteklemez; JSON_EXTRACT ve JSON_UNQUOTE her ikisinde de çalışır.
- Kısmi güncelleme: JSON_SET, JSON_REMOVE ve JSON_ARRAY_APPEND belgenin tamamını uygulamada yeniden kurmadan alan değiştirir.
- Geçerli JSON: Veriyi uygulamada json_encode ile üretin; MySQL geçersiz JSON'u reddeder, MariaDB'de ise JSON türü JSON_VALID kısıtıyla aynı işi görür.
SQL ile uygulama
Teoriyi somutlaştırmak için kısa bir SQL örneğine bakalım:
CREATE TABLE urunler (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ad VARCHAR(150) NOT NULL,
ozellikler JSON NOT NULL,
-- Sık aranan alan: oluşturulmuş sütun + indeks
renk VARCHAR(30) AS (JSON_UNQUOTE(JSON_EXTRACT(ozellikler, '$.renk'))) STORED,
INDEX ix_renk (renk)
);
INSERT INTO urunler (ad, ozellikler)
VALUES ('Kablosuz Mouse', '{"renk": "siyah", "dpi": 1600, "baglanti": ["bluetooth", "2.4ghz"]}');
SELECT ad, JSON_EXTRACT(ozellikler, '$.dpi') AS dpi
FROM urunler
WHERE renk = 'siyah' AND JSON_CONTAINS(ozellikler, '"bluetooth"', '$.baglanti');
UPDATE urunler SET ozellikler = JSON_SET(ozellikler, '$.dpi', 3200) WHERE id = 1;Örneği kendi projenize uyarlarken değişken adlarını ve yapılandırma değerlerini ortamınıza göre değiştirmeyi unutmayın.
Bir sorguyu canlı veritabanında değiştirmeden önce EXPLAIN ile çalışma planını inceleyin.
Avantajları
Kısaca özetlemek gerekirse:
- Şema değişikliği yapmadan yeni alan eklenebilir
- Esnek veriler için ayrı anahtar-değer tablosuna gerek kalmaz
- Oluşturulmuş sütunlarla esneklik ve hız birlikte elde edilir
Özetle
MySQL JSON Sütunları: Ne Zaman Kullanılır, Nasıl Sorgulanır?, küçük ama düzenli adımlarla ustalaşılan konulardan biri. Özellikle Doğru kullanım alanı ve Geçerli JSON başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.
İlgili içerikler:
- MySQL İndeksleri ile Sorgu Hızlandırma
- JavaScript Fetch API ve async/await ile Veri Çekme
- Tailwind CSS ile Titreşimsiz Dark Mode
Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.
Yazar
Ferdi Giden @adminPHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.