Untuk Data MySQL tipe "enum" dan "set" apa perbedaan dan keuntungan dan kerugian menggunakan satu versus yang lain?
Contoh tipe data:
- enum ('A', 'B', 'C')
- set ('A', 'B', 'C')
Satu-satunya perbedaan yang saya sadari adalah bahwa ENUM hanya mengizinkan satu nilai untuk dipilih, sedangkan SET memungkinkan beberapa nilai untuk dipilih.
Jawaban:
Seperti yang dinyatakan dalam dokumentasi MySQL :
sumber
(a, b, c, d)
tidak akan ditolak. Hanyad
kemauan yang ditolak sehingga menghasilkan nilai(a, b, c)
.analogi:
ENUM = bidang radio (hanya nilai yang diterima yang terdaftar, hanya boleh memilih satu)
SET = bidang kotak centang (hanya nilai yang diterima yang terdaftar, dapat memilih beberapa)
sumber
Enum dan Set sepenuhnya bergantung pada kebutuhan, seperti jika Anda memiliki daftar tombol radio di mana hanya satu yang dapat dipilih dalam satu waktu, gunakan Enum. Dan jika Anda memiliki daftar kotak centang di mana pada satu waktu lebih dari satu item dapat dipilih, gunakan set.
sumber
CREATE TABLE setTest( attrib SET('bold','italic','underline') ); INSERT INTO setTest (attrib) VALUES ('bold'); INSERT INTO setTest (attrib) VALUES ('bold,italic'); INSERT INTO setTest (attrib) VALUES ('bold,italic,underline');
Anda dapat menyalin kode di atas dan menempelkannya di mysql, dan Anda akan menemukan bahwa SET sebenarnya adalah sebuah koleksi. Anda dapat menyimpan setiap gabungan atribut yang Anda deklarasikan.
CREATE TABLE enumTest( color ENUM('red','green','blue') ); INSERT INTO enumTest (color) VALUES ('red'); INSERT INTO enumTest (color) VALUES ('gray'); INSERT INTO enumTest (color) VALUES ('red,green');
Anda juga dapat menyalin kode di atas. Dan Anda akan menemukan bahwa setiap ENUM sebenarnya hanya dapat disimpan sekali setiap saat. Dan Anda akan menemukan bahwa hasil dari 2 baris terakhir akan kosong.
sumber
Sebenarnya ini cukup sederhana:
Saat Anda menentukan ENUM ('Ya', 'Tidak', 'Mungkin'), Anda harus MENYISIPKAN hanya satu dari nilai-nilai ini (atau nomor indeks posisinya)
Ketika Anda mendefinisikan SET ('R', 'W', 'X') maka Anda dapat MEMASUKKAN string kosong, atau satu atau lebih dari nilai-nilai ini. Jika Anda memasukkan sesuatu yang tidak ada di set standar, string kosong akan disisipkan. Perhatikan bahwa sebelum memasukkan semua nilai duplikat akan dibuang, jadi hanya satu contoh dari setiap nilai yang diizinkan yang dimasukkan.
Semoga ini menyelesaikannya.
Harap dicatat bahwa jawaban Winbobob salah dan berisi contoh yang salah, seperti saat memasukkan beberapa nilai, nilainya harus berupa string, dipisahkan dengan koma. Semua sisipannya sebenarnya hanya memasukkan satu nilai (dan dua yang terakhir tidak ada dalam set yang ditentukan)
sumber
ENUM -> pilih hanya satu dari nilai yang tersedia untuk disisipkan.
(no_null, no_any_duplicate)
SET -> pilih kombinasi atau nilai tunggal seperti satu set dan masukkan ke dalamnya.
(null, individual_values, all_the_available_values_together)
sumber