Özet: bu yazıda, numaralandırma değerlerini kapsayan sütunları tanımlamak için MySQL ENUM veri türünü nasıl kullanacağınızı öğreneceksiniz.
MySQL ENUM veri türüne giriş
MySQL’de bir ENUM, değeri sütun oluşturma sırasında tanımlanan izin verilen değerler listesinden seçilen bir dize nesnesidir.
ENUM veri türü aşağıdaki avantajları sağlar:
- Kompakt veri depolama. MySQL ENUM, dize değerlerini temsil etmek için sayısal dizinleri (1, 2, 3,…) kullanır.
- Okunabilir sorgular ve çıktılar.
Bir ENUM sütunu tanımlamak için aşağıdaki söz dizimini kullanırsınız:
1 2 3 4 5 6 7 | CREATE TABLE tablo_adi ( ... sutun ENUM ('deger1','deger2','deger3'), ... ); |
Bu sözdiziminde üçten fazla numaralandırma değerine sahip olabilirsiniz. Ancak, numaralandırma değerlerinin sayısını 20’nin altında tutmak iyi bir uygulamadır.
Aşağıdaki örneği görelim.
Biliyoruz ki, cinsiyetlerde iki tane veriyi saklarız. KADIN yada ERKEK değerleri için ENUM kullanabiliriz.
1 2 3 4 5 6 7 | CREATE TABLE kisiler ( id INT PRIMARY KEY AUTO_INCREMENT, ad VARCHAR(255) NOT NULL, cinsiyet ENUM('KADIN', 'ERKEK') NOT NULL ); |
Cinsiyet sutunu yanlızca erkek yada kadın değerlerini kabul eder. Fakat MySQL arkaplanda bu değerleri sayısal değerler ile eşleştirir. KADIN -> 1, ERKEK ->2, şeklinde eşleştirecektir.
MySQL ENUM değerlerini ekleme
Bir ENUM sütununa veri eklemek için, önceden tanımlanmış listedeki numaralandırma değerlerini kullanırsınız. Örneğin, aşağıdaki ifade kisiler tablosuna yeni bir satır ekler.
1 2 3 4 | INSERT INTO kisiler(ad, cinsiyet) VALUES('Ahmet C.', 'ERKEK'); |
Numaralandırma değerlerinin yanı sıra, bir ENUM sütununa veri eklemek için numaralandırma elemanının sayısal dizinini de kullanabilirsiniz. Örneğin, aşağıdaki ifade KADIN değerine sahip yeni bir kişi ekler:
1 2 3 4 | INSERT INTO kisiler(ad, cinsiyet) VALUES('Ayşe C.', 1); |
MySQL ENUM değerlerini filtreleme
Aşağıdaki açıklama tüm kadın değerlerini seçer:
1 2 3 4 | select * from kisiler where cinsiyet='KADIN' |
Numaralandırma üyesi ‘KADIN’ ile eşlendiğinden, aşağıdaki sorgu aynı sonuç kümesini döndürür:
1 2 3 4 | select * from kisiler where cinsiyet=1 |
MySQL ENUM dezavantajları
MySQL ENUM aşağıdaki dezavantajlara sahiptir:
- Numaralandırma üyelerini değiştirmek, kaynaklar ve zaman açısından maliyetli olan ALTER TABLE ifadesini kullanarak tüm tablonun yeniden oluşturulmasını gerektirir.
- Numaralandırma listesinin tamamını almak karmaşıktır çünkü information_schema veritabanına erişmeniz gerekir:
1 2 3 4 5 6 7 8 9 | SELECT column_type FROM information_schema.COLUMNS WHERE TABLE_NAME = 'kisiler' AND COLUMN_NAME = 'cinsiyet'; |
- ENUM SQL standardı olmadığı ve pek çok veritabanı sisteminin desteklemediği için diğer RDBMS’ye bağlantı yapılması sorun olabilir.
- Numaralandırma listesine daha fazla özellik eklemek mümkün değildir. Her bir öncelik için örneğin Yüksek (24 saat), Orta (1-2 gün), Düşük (1 hafta) bir hizmet sözleşmesi eklemek istediğinizi varsayalım, ENUM ile mümkün değildir. Bu durumda, öncelikler listesini (örneğin öncelikler (id, isim, siralama, aciklama) saklamak için ayrı bir tabloya sahip olmanız gerekir.
- Arama tablosu ile karşılaştırıldığında (cinsiyet), bir numaralandırma listesi tekrar kullanılamaz. Örneğin, musteriler adında yeni bir tablo oluşturmak ve cinsiyet listesini yeniden kullanmak istiyorsanız, bu mümkün değildir.
Bu yazıda, size MySQL ENUM Nedir sorusuna cevap verip, veri türünü ve numaralandırma değerlerini depolayan sütunları tanımlamak için nasıl kullanılacağını açıkladık.
1 Yorum