{"id":201,"title":"SQL Notlar\u0131: ENUM Veri T\u00fcr\u00fc","content":"<p>### MySQL'de ENUM Veri T\u00fcr\u00fc<\/p><p>MySQL'de `ENUM`, bir s\u00fctuna belirli bir de\u011fer k\u00fcmesinden de\u011ferler atamak i\u00e7in kullan\u0131lan bir veri t\u00fcr\u00fcd\u00fcr. Bu yaz\u0131da, `ENUM` veri t\u00fcr\u00fcn\u00fcn avantajlar\u0131n\u0131, alternatiflerini ve nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 ele alaca\u011f\u0131z.<\/p><p>#### 1. ENUM Nedir ve Neden Kullan\u0131l\u0131r?<\/p><p>`ENUM`, bir sat\u0131r i\u00e7in belirli bir \u00f6zellik (attribute) tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r. \u00d6zellikle az say\u0131da ve say\u0131sal olmayan se\u00e7enekler i\u00e7in idealdir.<\/p><p>##### \u00d6rnek: ENUM Kullan\u0131m\u0131<\/p><p>```sql<br>CREATE TABLE example (<br>&nbsp; &nbsp;reply ENUM('yes', 'no'),<br>&nbsp; &nbsp;gender ENUM('male', 'female', 'other', 'decline-to-state')<br>);<br>```<\/p><p>Bu \u00f6rnekte, `reply` s\u00fctunu sadece `'yes'` veya `'no'` de\u011ferlerini alabilirken, `gender` s\u00fctunu `'male'`, `'female'`, `'other'` veya `'decline-to-state'` de\u011ferlerini alabilir.<\/p><p>##### Veri Ekleme ve Sorgulama<\/p><p>```sql<br>INSERT INTO example (reply, gender) VALUES ('yes', 'female');<br>SELECT * FROM example;<br>```<\/p><p>**Sonu\u00e7:**<br>```<br>+---+---+<br>| reply | gender |<br>+---+---+<br>| yes &nbsp; | female |<br>+---+---+<br>```<\/p><p>#### 2. VARCHAR Alternatifi<\/p><p>`ENUM` yerine `VARCHAR` kullanmak da bir se\u00e7enektir, ancak bu durumda baz\u0131 avantajlar ve dezavantajlar ortaya \u00e7\u0131kar.<\/p><p>##### \u00d6rnek: VARCHAR Kullan\u0131m\u0131<\/p><p>```sql<br>CREATE TABLE example (<br>&nbsp; &nbsp;type VARCHAR(20) COMMENT \"fish, bird, etc\"<br>);<br>```<\/p><p>**Kar\u015f\u0131la\u015ft\u0131rma:**<\/p><p>- **INSERT:** Her iki durumda da de\u011ferler do\u011frudan eklenir.<br>- **SELECT:** Her iki durumda da ger\u00e7ek de\u011ferler d\u00f6nd\u00fcr\u00fcl\u00fcr.<br>- **Dezavantaj:** `VARCHAR` kullan\u0131ld\u0131\u011f\u0131nda, yanl\u0131\u015f yaz\u0131mlar (typo) fark edilmeyebilir ve daha fazla depolama alan\u0131 t\u00fcketilir.<\/p><p>#### 3. Yeni Se\u00e7enek Ekleme<\/p><p>`ENUM` s\u00fctununa yeni bir se\u00e7enek eklemek i\u00e7in `ALTER TABLE` komutu kullan\u0131l\u0131r.<\/p><p>##### \u00d6rnek: Yeni Se\u00e7enek Ekleme<\/p><p>```sql<br>ALTER TABLE example MODIFY COLUMN type ENUM('fish', 'mammal', 'bird', 'insect');<br>```<\/p><p>**Not:**&nbsp;<br>- `MODIFY COLUMN` kullan\u0131rken, `NOT NULL` gibi di\u011fer nitelikleri de yeniden belirtmek gerekir, aksi takdirde kaybolurlar.<br>- Liste 256'dan az \u00f6\u011fe i\u00e7eriyorsa ve yeni se\u00e7enek listenin sonuna ekleniyorsa, `ALTER` i\u015flemi h\u0131zl\u0131 bir \u015fekilde ger\u00e7ekle\u015fir.<\/p><p>#### 4. NULL vs NOT NULL<\/p><p>`ENUM` s\u00fctunlar\u0131 `NULL` veya `NOT NULL` olarak tan\u0131mlanabilir. `NULL` de\u011ferler, s\u00fctunun bo\u015f b\u0131rak\u0131labilece\u011fi anlam\u0131na gelir.<\/p><p>##### \u00d6rnek: NULL ve NOT NULL Kar\u015f\u0131la\u015ft\u0131rmas\u0131<\/p><p>```sql<br>CREATE TABLE enum_example (<br>&nbsp; &nbsp;e ENUM('yes', 'no') NOT NULL,<br>&nbsp; &nbsp;enull ENUM('x', 'y', 'z') NULL<br>);<\/p><p>INSERT INTO enum_example (e, enull)<br>VALUES<br>&nbsp; &nbsp;('yes', 'x'),<br>&nbsp; &nbsp;('no', 'y'),<br>&nbsp; &nbsp;(NULL, NULL),<br>&nbsp; &nbsp;('bad-value', 'bad-value');<br>```<\/p><p>**Uyar\u0131lar:**<br>```<br>+---+---+<br>| Level | Code | Message &nbsp; &nbsp;|<br>+---+---+<br>| Warning | 1048 | Column 'e' cannot be null &nbsp; &nbsp;|<br>| Warning | 1265 | Data truncated for column 'e' at row 4 &nbsp; |<br>| Warning | 1265 | Data truncated for column 'enull' at row 4 |<br>+---+---+<br>```<\/p><p>**Sorgu Sonu\u00e7lar\u0131:**<\/p><p>```sql<br>SELECT e, e+0 FROM enum_example;<br>```<\/p><p>**Sonu\u00e7:**<br>```<br>+---+---+<br>| e | e+0 |<br>+---+---+<br>| yes | 1 |<br>| no &nbsp;| 2 |<br>| &nbsp; &nbsp; | 0 | -- NULL |<br>| &nbsp; &nbsp; | 0 | -- 'bad-value' |<br>+---+---+<br>```<\/p><p>```sql<br>SELECT enull, enull+0 FROM enum_example;<br>```<\/p><p>**Sonu\u00e7:**<br>```<br>+---+---+<br>| enull | enull+0 |<br>+---+---+<br>| x &nbsp; &nbsp;| 1 |<br>| y &nbsp; &nbsp;| 2 |<br>| NULL | NULL |<br>| &nbsp; &nbsp; &nbsp;| 0 | -- 'bad-value' |<br>+---+---+<br>```<\/p><p>#### Sonu\u00e7<\/p><p>`ENUM` veri t\u00fcr\u00fc, belirli bir de\u011fer k\u00fcmesi i\u00e7eren s\u00fctunlar i\u00e7in kullan\u0131\u015fl\u0131d\u0131r. Ancak, `VARCHAR` gibi alternatifler de d\u00fc\u015f\u00fcn\u00fclmeli ve ihtiya\u00e7lara g\u00f6re en uygun se\u00e7enek belirlenmelidir. `ENUM` kullan\u0131rken, `NULL` ve `NOT NULL` durumlar\u0131na dikkat edilmeli ve yeni se\u00e7enekler eklenirken `ALTER TABLE` komutu kullan\u0131lmal\u0131d\u0131r. Bir sonraki yaz\u0131da g\u00f6r\u00fc\u015fmek \u00fczere!<\/p>","excerpt":"`ENUM` veri t\u00fcr\u00fc, belirli bir de\u011fer k\u00fcmesi i\u00e7eren s\u00fctunlar i\u00e7in kullan\u0131\u015fl\u0131d\u0131r. Ancak, `VARCHAR` gibi alternatifler de d\u00fc\u015f\u00fcn\u00fclmeli ve ihtiya\u00e7lara g\u00f6re en uygun se\u00e7enek belirlenmelidir. `ENUM` kullan\u0131rken, `NULL` ve `NOT NULL` durumlar\u0131na dikkat edilmeli ve yeni se\u00e7enekler eklenirken `ALTER TABLE` komutu kullan\u0131lmal\u0131d\u0131r","created_at":"2025-01-13 15:36:33","updated_at":"2026-09-07 08:32:54","category_id":9,"view_count":581,"reading_time":3,"status":"published","editor_choice":0,"is_editor_choice":0,"published_at":"2025-01-13 15:36:33","featured_image":"resimyok.jpg","slug":"sql-notlari-enum-veri-turu","category_name":"Yaz\u0131l\u0131m","category_slug":"yazilim"}