MySQL'deki ENUM veri türü bir dize nesnesi . Tablo oluşturma sırasında sütun spesifikasyonunda izin verilen değerler listesinden seçilen değeri sınırlamamıza olanak tanır. Bunun için kısa numaralandırma Bu, her sütunun belirtilen olası değerlerden birine sahip olabileceği anlamına gelir. Kullanır sayısal indeksler (1, 2, 3…) dize değerlerini temsil etmek için.
MySQL ENUM veri türü aşağıdaki avantajları içerir:
- Sütunun sınırlı sayıda belirlenmiş olası değere sahip olabildiği kompakt veri depolama. Burada dize değerleri otomatik olarak sayısal bir dizin olarak kullanılır.
- Sayılar tekrar karşılık gelen dizeye çevrilebildiğinden okunabilir sorgulara ve çıktılara izin verir.
- Tamsayı, kayan nokta, ondalık ve dize gibi birçok veri türünü kabul edebilir.
Sözdizimi
Sütundaki ENUM veri türünü tanımlamak için kullanılan sözdizimi aşağıdadır:
CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… );
Yukarıdaki sözdiziminde yalnızca üç ENUM değeri tanımladık ancak ihtiyaçlarımıza göre artırılabilir. Burada numaralandırma değerlerinin her zaman içinde kalması gerektiğinden emin olmalıyız. alıntılanan dize değişmez değeri .
MySQL, ENUM veri türünü aşağıdaki özelliklerle tanımlamamıza olanak tanır:
GEÇERSİZ DEĞİL: Varsayılan olarak ENUM veri türü NULL'dur. Eğer NULL değerlerine izin vermek istemiyorsak ENUM sütununu belirtirken NOT NULL özelliğini kullanmak gerekir.
HÜKÜMSÜZ: DEFAULT NULL ile eşanlamlıdır ve dizin değeri her zaman NULL'dur.
VARSAYILAN: Sütunda bir değer belirtilmediğinde ENUM veri türü varsayılan değeri ekler. Başka bir deyişle, INSERT deyimi bu sütun için bir değer sağlamıyorsa bu durumda varsayılan değer eklenecektir. DEFAULT ifadesi fonksiyon eklenmesine izin vermiyor. My SQL'deki ENUM veri türü, DEFAULT değerlerini NULL veya boş bir dize ('') olarak içerir.
MySQL ENUM Örneği
Aşağıdaki çizim ile ENUM veri tipinin MySQL'de nasıl çalıştığını anlayalım. Burada 'adlı bir tablo oluşturacağız' gömlek ' üç sütun içerir: kimlik, ad ve boyut.
Boyut sütunu ENUM veri türünü kullanır ve küçük, orta, büyük ve x-large boyutlarına sahiptir. MySQL bu numaralandırma üyesini sırasıyla küçük=1, orta=2, büyük=3 ve x-large=4 olan sayısal bir dizine eşler. Bir tablo oluşturmak için aşağıdaki sorguyu yürütün:
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') );
Daha sonra şunları yapmamız gerekiyor: sokmak değerleri tabloya ekleyin. Ekleme sırasında numaralandırma değerleri, dize değişmez değeri veya sayısal dizinleri olarak eklenebilir ve her ikisi de aynıdır. Değerleri tabloya eklemek için aşağıdaki ifadeyi yürütün:
INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small');
Şimdi tabloya eklenen değerleri görmek için SELECT ifadesini çalıştırın:
mysql> SELECT * FROM shirts;
Aşağıdaki görüntü, yalnızca dize değişmezlerindeki numaralandırma değerlerini içeren yukarıdaki sorgu sonuçlarının tümünü içerir:
ENUM Sıralaması
MySQL, numaralandırma değerlerini, verileri sütun spesifikasyonuna eklediğimiz sıraya bağlı olan sayısal indekslerine göre sıralar. Örneğin Numaralandırmayı ENUM ('b', 'a', '', 'c') olarak tanımlamışsak. Daha sonra b a'dan önce gelir, boş dize c'den (boş olmayan dize) önce gelir ve NULL değeri diğer değerlerden önce gelir.
Dolayısıyla, ORDER BY yan tümcesini kullanarak ENUM veri türüyle beklenmeyen bir sonuç almak istemiyorsak şu kuralları izleyin:
- Numaralandırma değerlerini alfabetik sırayla tanımlayın.
- Sütun adının indeks numarasından ziyade sözlük sırasına göre olduğundan emin olmak içindir.
Aşağıdaki örnek, numaralandırma sıralamasını daha açık bir şekilde açıklamaktadır. Dolayısıyla gömleklerin bedenlerini belirli bir sıraya göre almak istiyorsanız aşağıdaki ifadeyi uygulayın:
mysql> SELECT * FROM shirts ORDER BY size DESC;
Bu sorgu, gömlek bedenlerinin azalan sırada olduğunu görebildiğimiz çıktıyı aşağıdaki gibi verecektir:
ENUM Veri Türü Sınırlamaları
MySQL'deki ENUM veri türünün dezavantajları şunlardır:
1. Numaralandırma değerlerini/üyelerini değiştirmek istiyorsak, ALTER TABLE komutunu kullanarak tüm tabloyu yeniden oluşturarak bunu yapabiliriz. Aynı zamanda kaynaklarımızın ve zamanımızın pahalı kullanılmasına neden olur.
2. Numaralandırma üyeleriyle bir ifade kullanamayız. Örneğin, bu CREATE deyimi, numaralandırma üyeleri oluşturmak için CONCAT() işlevini kullandığından yürütülmez.
CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') );
3. Kullanıcı değişkenini numaralandırma üyesi olarak kullanamayız. Aşağıdaki örnekte görülebilir:
'100 üzerinden 10 kaç'
SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') );
4. Numaralandırma üyeleri olarak sayısal değerleri kullanmamamız tavsiye edilir.
5. Bilgi_şema veritabanına erişmemiz gerektiğinden tam bir bilgi numaralandırma listesi elde etmek karmaşıktır.
6. Birçok veritabanı bu veri tipini desteklemediğinden ENUM'un diğer RDBMS'lere taşınması sırasında sorun yaşayabiliriz.
7. Numaralandırma listelerine daha fazla özellik ekleyemiyoruz.