sql >> Databasteknik >  >> RDS >> Mysql

MySQL ENUM-typ kontra sammanfogningstabeller

  • 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 prova SELECT 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 .



  1. Hur skickar man godtyckliga parametrar till Oracle trigger?

  2. Det mest eleganta sättet att generera permutationer i SQL-server

  3. Funktion i SQL Server 2008 som liknar GREATEST i mysql?

  4. SQL Server String eller binära data skulle trunkeras