Dla typu danych MySQL „wyliczenie” i „zestaw”, jakie są różnice, zalety i wady korzystania z jednego w porównaniu z drugim?
Przykładowy typ danych:
- wyliczenie („A”, „B”, „C”)
- zestaw („A”, „B”, „C”)
Jedyną różnicą, o której wiem, jest to, że ENUM umożliwia wybranie tylko jednej wartości, a SET pozwala wybrać wiele wartości.
Odpowiedzi:
Jak stwierdza dokumentacja MySQL :
źródło
(a, b, c, d)
nie zostanie odrzucona. Tylkod
wola zostanie odrzucona, co daje wartość(a, b, c)
.analogia:
ENUM = pola radiowe (wymienione są tylko akceptowane wartości, można wybrać tylko jedną)
SET = pola wyboru (wymienione są tylko akceptowane wartości, można wybrać wiele)
źródło
Enum i Set całkowicie zależą od wymagań, na przykład jeśli masz listę przycisków opcji, z których można wybrać tylko jeden naraz, użyj Enum. A jeśli masz listę pól wyboru, w których można wybrać więcej niż jedną pozycję, użyj set.
źródło
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');
Możesz skopiować powyższy kod i wkleić go do mysql, a przekonasz się, że SET faktycznie jest kolekcją. Możesz przechowywać każdy zestaw atrybutów, które deklarujesz.
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');
Możesz również skopiować powyższy kod. Przekonasz się, że każdy ENUM może być przechowywany tylko raz za każdym razem. Przekonasz się, że wyniki z ostatnich 2 wierszy będą puste.
źródło
Właściwie to całkiem proste:
Podczas definiowania ENUM ( „Tak”, „Nie”, „Być może”), wtedy należy włożyć tylko jedną z tych wartości (lub ich pozycyjną numer indeksu)
Po zdefiniowaniu zestawie ( „R”, „W”, „X”), wtedy można wstawić pusty fragment, lub jeden lub więcej z tych wartości. Jeśli wstawisz coś, czego nie ma we wstępnie zdefiniowanym zestawie, zamiast tego zostanie wstawiony pusty ciąg. Zauważ, że przed wstawieniem wszystkie zduplikowane wartości są odrzucane, więc wstawiane jest tylko jedno wystąpienie każdej dozwolonej wartości.
Mam nadzieję, że to wyjaśnia sprawę.
Zwróć uwagę, że odpowiedź Winbobob jest niepoprawna i zawiera błędne przykłady, ponieważ podczas wstawiania wielu wartości wartości muszą być ciągami znaków oddzielonymi przecinkami. Wszystkie jego wstawki faktycznie wstawiają tylko jedną wartość (a ostatnie dwie nie znajdują się w zdefiniowanym zestawie)
źródło