sql >> Database teknologi >  >> RDS >> Mysql

MySQL ENUM type vs join tabeller

  • Æ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øve SELECT 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 .



  1. Sådan opretter du en database fra et script i MySQL

  2. Sammenkæd en streng og et tal i MySQL

  3. Hvordan opretter man en SQL Server-funktion for at forbinde flere rækker fra en underforespørgsel til et enkelt afgrænset felt?

  4. 3 måder at returnere en liste over SQL Server Agent-job (T-SQL)