### MySQL’de ENUM Veri Türü
MySQL’de `ENUM`, bir sütuna belirli bir değer kümesinden değerler atamak için kullanılan bir veri türüdür. Bu yazıda, `ENUM` veri türünün avantajlarını, alternatiflerini ve nasıl kullanılacağını ele alacağız.
#### 1. ENUM Nedir ve Neden Kullanılır?
`ENUM`, bir satır için belirli bir özellik (attribute) tanımlamak için kullanılır. Özellikle az sayıda ve sayısal olmayan seçenekler için idealdir.
##### Örnek: ENUM Kullanımı
“`sql
CREATE TABLE example (
reply ENUM(‘yes’, ‘no’),
gender ENUM(‘male’, ‘female’, ‘other’, ‘decline-to-state’)
);
“`
Bu örnekte, `reply` sütunu sadece `’yes’` veya `’no’` değerlerini alabilirken, `gender` sütunu `’male’`, `’female’`, `’other’` veya `’decline-to-state’` değerlerini alabilir.
##### Veri Ekleme ve Sorgulama
“`sql
INSERT INTO example (reply, gender) VALUES (‘yes’, ‘female’);
SELECT * FROM example;
“`
**Sonuç:**
“`
+—+—+
| reply | gender |
+—+—+
| yes | female |
+—+—+
“`
#### 2. VARCHAR Alternatifi
`ENUM` yerine `VARCHAR` kullanmak da bir seçenektir, ancak bu durumda bazı avantajlar ve dezavantajlar ortaya çıkar.
##### Örnek: VARCHAR Kullanımı
“`sql
CREATE TABLE example (
type VARCHAR(20) COMMENT “fish, bird, etc”
);
“`
**Karşılaştırma:**
– **INSERT:** Her iki durumda da değerler doğrudan eklenir.
– **SELECT:** Her iki durumda da gerçek değerler döndürülür.
– **Dezavantaj:** `VARCHAR` kullanıldığında, yanlış yazımlar (typo) fark edilmeyebilir ve daha fazla depolama alanı tüketilir.
#### 3. Yeni Seçenek Ekleme
`ENUM` sütununa yeni bir seçenek eklemek için `ALTER TABLE` komutu kullanılır.
##### Örnek: Yeni Seçenek Ekleme
“`sql
ALTER TABLE example MODIFY COLUMN type ENUM(‘fish’, ‘mammal’, ‘bird’, ‘insect’);
“`
**Not:**
– `MODIFY COLUMN` kullanırken, `NOT NULL` gibi diğer nitelikleri de yeniden belirtmek gerekir, aksi takdirde kaybolurlar.
– Liste 256’dan az öğe içeriyorsa ve yeni seçenek listenin sonuna ekleniyorsa, `ALTER` işlemi hızlı bir şekilde gerçekleşir.
#### 4. NULL vs NOT NULL
`ENUM` sütunları `NULL` veya `NOT NULL` olarak tanımlanabilir. `NULL` değerler, sütunun boş bırakılabileceği anlamına gelir.
##### Örnek: NULL ve NOT NULL Karşılaştırması
“`sql
CREATE TABLE enum_example (
e ENUM(‘yes’, ‘no’) NOT NULL,
enull ENUM(‘x’, ‘y’, ‘z’) NULL
);
INSERT INTO enum_example (e, enull)
VALUES
(‘yes’, ‘x’),
(‘no’, ‘y’),
(NULL, NULL),
(‘bad-value’, ‘bad-value’);
“`
**Uyarılar:**
“`
+—+—+
| Level | Code | Message |
+—+—+
| Warning | 1048 | Column ‘e’ cannot be null |
| Warning | 1265 | Data truncated for column ‘e’ at row 4 |
| Warning | 1265 | Data truncated for column ‘enull’ at row 4 |
+—+—+
“`
**Sorgu Sonuçları:**
“`sql
SELECT e, e+0 FROM enum_example;
“`
**Sonuç:**
“`
+—+—+
| e | e+0 |
+—+—+
| yes | 1 |
| no | 2 |
| | 0 | — NULL |
| | 0 | — ‘bad-value’ |
+—+—+
“`
“`sql
SELECT enull, enull+0 FROM enum_example;
“`
**Sonuç:**
“`
+—+—+
| enull | enull+0 |
+—+—+
| x | 1 |
| y | 2 |
| NULL | NULL |
| | 0 | — ‘bad-value’ |
+—+—+
“`
#### Sonuç
`ENUM` veri türü, belirli bir değer kümesi içeren sütunlar için kullanışlıdır. Ancak, `VARCHAR` gibi alternatifler de düşünülmeli ve ihtiyaçlara göre en uygun seçenek belirlenmelidir. `ENUM` kullanırken, `NULL` ve `NOT NULL` durumlarına dikkat edilmeli ve yeni seçenekler eklenirken `ALTER TABLE` komutu kullanılmalıdır. Bir sonraki yazıda görüşmek üzere!