Selain tipe data standar seperti Numerik, String dan Date, MySQL juga menyediakan tipe data khusus yang merupakan kumpulan data yang kita definisikan sendiri. Tipe data bentukan ini terdiri dari ENUM dan SET. Dalam tutorial belajar MySQL kali ini kita akan membahas tentang Tipe Data ENUM dan SET dalam MySQL.
Pengertian Tipe data ENUM dalam MySQL
Tipe data ENUM merupakan tipe data yang khusus untuk kolom dimana nilai datanya sudah kita tentukan sebelumnya. Pilihan ini dapat berisi 1 sampai dengan 65,535 pilihan string. Dimana kolom yang didefinisikan sebagai ENUM hanya dapat memilih satu diantara pilihan string yang tersedia.
Contoh penggunaan ENUM misalnya untuk kolom yang berisi daftar Jurusan yang harus dipilih mahasiswa. Pilihan ini harus sudah tersedia sebelumnya, dan kita dapat menggunakan tipe data enum untuk memastikan bahwa jurusan yang dipilih adalah jurusan yang telah ditentukan sebelumnya dan hanya 1 jurusan.
Contoh query tipe data ENUM:
mysql> CREATE TABLE jurusan (jur ENUM('Ilmu Komputer','Ekonomi','MIPA','Kedokteran')); Query OK, 0 rows affected (0.07 sec) mysql> DESCRIBE jurusan; +-------+-----------------------------------------------------+------+-----+---------+-------+ | Field | Type                                               | Null | Key | Default | Extra | +-------+-----------------------------------------------------+------+-----+---------+-------+ | jur  | enum('Ilmu Komputer','Ekonomi','MIPA','Kedokteran') | YES |    | NULL   |      | +-------+-----------------------------------------------------+------+-----+---------+-------+ 1 row in set (0.01 sec) mysql> INSERT INTO jurusan VALUES ('Ilmu Komputer'); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO jurusan VALUES ('Kedokteran'); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO jurusan VALUES ('FISIP'); ERROR 1265 (01000): Data truncated for column 'jur' at row 1 mysql> INSERT INTO jurusan VALUES ('Ilmu Komunikasi'); ERROR 1265 (01000): Data truncated for column 'jur' at row 1 mysql> SELECT * FROM jurusan; +---------------+ | jur          | +---------------+ | Ilmu Komputer | | Kedokteran   | +---------------+ 2 rows in set (0.00 sec)
Pada query diatas, kita mendefinisikan kolom jur pada tabel Jurusan dengan tipe ENUM yang dapat dipilih dari pilihan yang tersedia : Ilmu Komputer,Ekonomi,MIPA, dan Kedokteran. Ketika kita mencoba menginput data baru, seperti Fisip dan Ilmu Komunikasi, MySQL mengeluarkan error, karena pilihan ini memang tidak kita definisikan sebelumnya.
Pengertian Tipe data SET dalam MySQL
Berbeda dengan tipe data ENUM dimana pilihan yang tersedia untuk kolom hanya dapat 1 data, untuk kolom SET kita dapat memilih satu atau lebih nilai yang tersedia dari 1 sampai 64 pilihan string yang tersedia.
Contoh penggunaan tipe data SET adalah untuk data tentang hobby seseorang, karena bisa aja seseorang memiliki hobi yang lebih dari 1, namun kita ingin memilih dari kumpulan list yang telah kita buat sebelumnya.
Contoh query tipe data SET:
mysql> CREATE TABLE hobi (hob SET('Membaca','Menulis','Menggambar','Main Musik')); Query OK, 0 rows affected (0.05 sec) mysql> DESCRIBE hobi; +-------+----------------------------------------------------+------+-----+---------+-------+ | Field | Type                                              | Null | Key | Default | Extra | +-------+----------------------------------------------------+------+-----+---------+-------+ | hob  | set('Membaca','Menulis','Menggambar','Main Musik') | YES |    | NULL   |      | +-------+----------------------------------------------------+------+-----+---------+-------+ 1 row in set (0.01 sec) mysql> INSERT INTO hobi VALUES ('Membaca'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO hobi VALUES ('Membaca,Main Musik'); Query OK, 1 row affected (0.07 sec) mysql> INSERT INTO hobi VALUES ('Menggambar,Main Musik'); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO hobi VALUES ('Belajar,Main Musik'); ERROR 1265 (01000): Data truncated for column 'hob' at row 1 mysql> SELECT * FROM hobi; +-----------------------+ | hob                  | +-----------------------+ | Membaca              | | Membaca,Main Musik   | | Menggambar,Main Musik | +-----------------------+ 3 rows in set (0.00 sec)
Dari query diatas, dapat kita lihat bahwa untuk menginput lebih dari 1 nilai, kita memisahkan dengan tanda koma dan tetap dalam tanda kutip, juga seandainya kita coba input hobi 'belajar', yang memang tidak ada sebelumnya, maka MySQL akan mengeluarkan pesan error.
Tipe data enum dan set adalah tipe data khusus dalam MySQL dan digunakan untuk menyeleksi input ke database agar sesuai dengan data yang tersedia. Dalam tutorial Belajar MySQL selanjutnya kita akan membahas tentang atribut tipe data yang digunakan untuk memberi sifat dan fitur tambahan kedalam sebuah kolom di dalam MySQL.
Terimakasih duniailkom atas tutorialnya, saya mengikuti tutorial mysql ini dari awal.
saya mau tanya, punya saya kok bedaya hasilnya untuk tutorial ENUM ini, setelah saya insert data yang "berbeda" hasilnya 1 row affected, 1 warning.
Tapi memang saat tabel di select data yang saya masukan tidak masuk, tapi ada row yang kosong.
mohon bantuanya. terimakasih.
Mungkin bisa ditulis query yang digunakan, biar bisa dilihat dimana kesalahannya :)
Mungkin gini om maksdnya, sy juga demikian…
padahal data FISIP dan Ilmu Komunikasi tidak ada ketika table dideklarasikan utk pilihan yg tersedianya:
MariaDB [db_ilkom]> INSERT INTO jurusan_enum VALUES ('FISIP');
Query OK, 1 row affected, 1 warning (0.08 sec) –> tetap terinput (meski pada hasilnya value kosong)
MariaDB [db_ilkom]> INSERT INTO jurusan_enum VALUES ('Ilmu Komunikasi');
Query OK, 1 row affected, 1 warning (0.11 sec) –> tetap terinput (meski pada hasilnya value kosong)
MariaDB [db_ilkom]> SELECT * FROM jurusan_enum;
+—————+
| jur |
+—————+
| Ilmu Komputer |
| Kedokteran |
| |
| |
+—————+
Oh, siip… terimakasih tambahannya :)
Query "JURUSAN" salah sepertinya kan table nya "jurusan" pakai huruf kecil semua
mysql> INSERT INTO JURUSAN values ('Ilmu Komputer');
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO JURUSAN values ('Kedokteran');
Query OK, 1 row affected (0.04 sec)
mysql> INSERT INTO JURUSAN values ('FISIP');
ERROR 1265 (01000): Data truncated for column 'jur' at row 1
mysql> INSERT INTO JURUSAN values ('Ilmu Komunikasi');
ERROR 1265 (01000): Data truncated for column 'jur' at row 1
Di dalam MySQL, penulisan nama tabel dan database tidak masalah jika menggunakan huruf besar atau kecil mas (case insensitive). Dalam contoh disini, hasilnya akan sama untuk query: INSERT INTO JURUSAN values ('Ilmu Komputer') maupun INSERT INTO jurusan values ('Ilmu Komputer').
Tapi karena sewaktu saya membuat tabel menggunakan huruf kecil, dan ketika query INSERT menggunakan huruf besar, jadi terlihat beda. Terimakasih mas, akan saya koreksi biar g membuat bingung :)
terimakasih penjelasannya mengenai tipe data enum dan set, pertanyaan saya hampir sama dengan Fajar Setianto, ketika saya inputkan data selain field yang sudah ditentukan baik tipe data ENUM dan SET data tersebut masih bisa di INSERT kan namun ada notif "1 row affected, 1 warning", saat saya cek data nya kosong (mungkin berisi NULL). Bagaimana cara mengatasinya, Versi berapa mysql yg anda gunakan & jur/hob saat pembuatan table digunakan untuk apa?
terimakasih
Tipe kolom SET dan ENUM memang hanya bisa diisi dengan data yang sudah ditentukan saja. Ini sesuai dengan defenisi kolom tersebut. Jika diinput nilai lain (yang tidak ada ditulis sewaktu pembuatan tabel), MySQL akan mengeluarkan WARNING dan data yang diinput dianggap NULL.
Jika ada kemungkinan data yang diinput tidak tersedia di pilihan, sebaiknya tidak menggunakan tipe data SET dan ENUM, tapi pakai kolom yang biasa (CHAR atau VARCHAR).
maaf sebelumnya, mau numpang tanya mas Andre, sy kesulitan untuk pengambilan data dari enum,
contoh enum('admin','user')
isi dari enum sy akan masukkan ke dalam list view di htmlnya bukan isi recordnya, sy mnggunakan menggunakan php untuk pengambilan datanya,
Mohon pencerahannya
terimaksih :D
Kalau untuk ambil nilai, tinggal pakai query "SELECT nama_kolom FROM nama_tabel", g ngaruh apakah kolom tersebut ENUM maupun VARHAR. Mungkin masalahnya ada di kode program PHP yang digunakan untuk menggenerate list HTML.
Assalamualaikum. , saya mau nanya untuk membuat table dengan tipe data enum,,saya sudah mengikuti langkah2 diatas ,, seperti ini :
Create table jurusan ( jur enum ('ilmu komputer','ekonomi','fkip'));
Tapi letak kesalahannya ada di 'ilmu komputer' ..
Ada yang bisa bantu ?
Waalaikumsalam….
Barusan saya test copy paste kode yang ditulis di komentar ini dan juga kode yang ada di tutorial. Semuanya tidak ada masalah. Bisa coba di copy paste kode error dari MySQLnya ke sini.
mysql> create table jurusan (jur enum('ilmu komputer','ekonomi','mipa','kedokteran');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near " at line 1
kenapa tu bang?
sertinya masalah versi MySQL yang belum memahami type data enum..
Mau nanya kan kalo enum ini cenderung buat ComboBox, gimana caranya link database yang tipe datanya enum ke combobox di netbeans. soalnya saya nemuin nilai kosong terus
Seharusnya tidak ada perbedaan antara enum dengan tipe data lain. Bisa di test dulu dengan tipe data seperti varchar, kalau bisa baru konversi ke enum.
status = ("belum bayar","menggu konfirmasi","diproses","dikirim","selesai")
Saya ingin menampilkan data dengan status hanya "belum bayar" dan "menunggu konfirmasi" sesuai dengan id_konsumen… misal
SELECT * FROM pesanan WHERE id_konsumen="2" disininya apalagi supaya yang muncul dengan status "belum bayar" dan "menunggu konfirmasi"
bisa buat bikin menu dan submenu ga,kak?
mysql> create table jurusan (jur enum('ilmu komputer','ekonomi','mipa','kedokteran');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near " at line 1
ini kenapa ya bang?
mysql> create table jurusan (jur enum('ilmu komputer','ekonomi','mipa','kedokteran'));