Hvordan og når du skal bruke mysql uuid -type

Hvordan og når du skal bruke mysql uuid -type
I henhold til rom og tid er universell unik identifikator, kjent som UUID, en 128-bit lang verdi som er unik over hele kloden. UUID er spesifisert av RFC 4122.

UUID -verdier er utrolig fascinerende fordi selv om verdiene er generert fra samme enhet, kan de aldri være de samme. Imidlertid vil jeg ikke komme inn på detaljer om teknologiene som brukes til å implementere UUID -er.

I denne opplæringen skal vi fokusere på fordelene ved å bruke UUID -er i stedet for INT for primærnøkler, ulempene med UUID -er i en database, og hvordan vi implementerer UUID -er i MySQL.

La oss komme i gang:

Uuid i mysql

For å generere en UUID i MySQL, bruker vi UUID () -funksjonen. Denne funksjonen returnerer en UTF8-streng med en 5-heksadesimal gruppe i form av:

AAAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEEEE

De tre første segmentene genereres som en del av tidsstempelformat i det lave, midtre og høye formatet.

Det fjerde segmentet av UUID -verdien er forbeholdt for å sikre midlertidig unikhet, der tidsstempelverdien synker monotonicity.

Det endelige segmentet representerer IEEE 802 -nodeverdien, og betegner unikhet over rommet.

Når skal du bruke UUID i mysql

Jeg vet hva du tenker:

Hvis uuider er unike globalt, hvorfor bruker vi dem ikke som standard primærnøkler i databasetabeller? Svaret er både enkelt og ikke enkelt.

For å begynne.

For det andre har UUider sine ulemper som kanskje ikke er aktuelt i alle tilfeller.

Tillat meg å dele noen få tilfeller der det kan være aktuelt å bruke UUID -er som primærnøkler.

  1. Et vanlig scenario er der det kreves fullstendig unikhet. Siden UUID -er er unike globalt, tilbyr de et perfekt alternativ for å slå sammen rader i databaser mens de bevarer unikheten.
  2. Sikkerhet - UUider utsetter ikke informasjon relatert til dataene dine og er derfor nyttige når sikkerhet er en faktor. For det andre genereres de offline uten å avsløre informasjon om systemet.

Følgende er noen av ulempene med å implementere UUID -er i databasen din.

  1. UUider er 6-byte sammenlignet med heltall som er 4-byte. Det betyr at de vil okkupere mer lagring for samme mengde data sammenlignet med heltall.
  2. Hvis UUID -er indekseres, kan de forårsake betydelige ytelseskostnader og bremse databasen.
  3. Siden UUID -er er tilfeldige og unike, kan de gjøre feilsøkingsprosessen unødvendig tungvint.

UUID -funksjoner

I MySQL 8.0 og senere kan du bruke forskjellige funksjoner for å motvirke noen av ulempene som UUIDS presenteres.

Disse funksjonene er:

  1. UUID_TO_BIN - Konverterer UUID fra Varchar til binær, noe som er mer effektivt for lagring i databaser
  2. Bin_to_uuid - fra binær til varchar
  3. IS_UUID - Returnerer boolsk sann hvis Arg er gyldig varchar uuid. Det motsatte er sant.

Grunnleggende mysql uuid typer bruk

Som nevnt tidligere, for å implementere UUID -er i MySQL, bruker vi UUID () -funksjonen. For å generere UUID, gjør vi for eksempel:

mysql> velg uuid ();
+--------------------------------------+
| Uuid () |
+--------------------------------------+
| F9EB97F2-A94B-11EB-AD80-089798BCC301 |
+--------------------------------------+
1 rad i sett (0.01 sek)

Bord med uuid

La oss lage en tabell med UUID -verdier og se hvordan vi kan implementere slik funksjonalitet. Tenk på spørringen nedenfor:

Slipp skjema hvis det finnes uuider;
Lage skjemaer uuider;
Bruk UUID -er;
Lag tabellvalidering
(
ID binær (16) primærnøkkel
);
Sett inn validering (ID)
Verdier (uuid_to_bin (uuid ())),
(Uuid_to_bin (uuid ())),
(Uuid_to_bin (uuid ())),
(Uuid_to_bin (uuid ())),
(Uuid_to_bin (uuid ()));

Når alle UUID -ene er generert, kan vi velge dem og konvertere dem fra binære til streng UUID -verdier som vist i spørringen nedenfor:

Velg BIN_TO_UUID (ID) ID fra validering;

Her er utgangen:

Konklusjon

Det er ikke mye å dekke om UUID -er i MySQL, men hvis du vil lære mer om dem, kan du vurdere å sjekke ut MySQL -kilden:

https: // dev.mysql.com/doc/