# önder online
Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri Yapay zekâ ve otomasyonun güvenliğe etkileri Microsoft 365 ve Active Directory güvenlik rehberleri Yazılım geliştirmede güvenlik odaklı yaklaşımlar Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri

Menu

SQL Notları: ENUM Veri Türü

SQL Notları: ENUM Veri Türü

`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

### 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!