-
För att ändra uppsättningen av värden i en ENUM krävs en
ALTER TABLE
vilket kan orsaka en tabellomstrukturering -- en otroligt dyr operation (tabellomstruktureringen sker inte om du bara lägger till ett nytt värde i slutet av ENUM-definitionen, men om du tar bort ett eller ändrar ordningen gör det en tabell omstrukturera). Att ändra uppsättningen värden i en uppslagstabell är så enkelt som INSERT eller DELETE. -
Det finns inget sätt att associera andra attribut med värdena i ett ENUM, som vilka som är borttagna och vilka som är berättigade att placeras i en rullgardinslista i ditt användargränssnitt. En uppslagstabell kan dock innehålla ytterligare kolumner för sådana attribut.
-
Det är mycket svårt att fråga ett ENUM för att få en lista med distinkta värden, vilket i princip kräver att du frågar efter datatypsdefinitionen från
INFORMATION_SCHEMA
, och att analysera listan från BLOB returnerades. Du kan provaSELECT DISTINCT status
från din tabell, men som bara får statusvärden som används för närvarande, vilket kanske inte är alla värden i ENUM. Men om du behåller värden i en uppslagstabell är det enkelt att fråga, sortera osv.
Jag är inget stort fan av ENUM, som ni märker. :-)
Detsamma gäller för CHECK-begränsningar som helt enkelt jämför en kolumn med en fast uppsättning värden. Även om MySQL inte stöder CHECK-begränsningar ändå.
Uppdatering:MySQL 8.0.16 implementerar nu KONTROLLERA begränsningar .