-
Ændring af værdisættet i et ENUM kræver en
ALTER TABLE
hvilket kan forårsage en tabelomstrukturering -- en utrolig dyr operation (tabelomstruktureringen sker ikke, hvis du blot tilføjer en ny værdi til slutningen af ENUM-definitionen, men hvis du sletter en eller ændrer rækkefølgen, udfører den en tabel omstrukturere). Mens ændring af værdisættet i en opslagstabel er så simpelt som INSERT eller DELETE. -
Der er ingen måde at knytte andre attributter til værdierne i et ENUM, som hvilke der er tilbagetrukket, og hvilke der er kvalificerede til at blive sat på en rulleliste i din brugergrænseflade. En opslagstabel kan dog indeholde yderligere kolonner for sådanne attributter.
-
Det er meget vanskeligt at forespørge et ENUM for at få en liste over forskellige værdier, hvilket grundlæggende kræver, at du forespørger datatypedefinitionen fra
INFORMATION_SCHEMA
, og parsing af listen ud af BLOB returneret. Du kan prøveSELECT DISTINCT status
fra din tabel, men det får kun statusværdier, der er i brug i øjeblikket, hvilket muligvis ikke er alle værdier i ENUM. Men hvis du beholder værdier i en opslagstabel, er det nemt at forespørge, sortere osv.
Jeg er ikke den store fan af ENUM, som du kan se. :-)
Det samme gælder for CHECK-begrænsninger, der blot sammenligner en kolonne med et fast sæt værdier. Selvom MySQL alligevel ikke understøtter CHECK-begrænsninger.
Opdatering:MySQL 8.0.16 implementerer nu check begrænsninger .