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

Kan jeg få et unikt TIMESTAMP for hver post i MySQL

En dag snart (5.6.4) vil MySQL give fraktionel sekunder i TIMESTAMP-kolonner er selv brøkdele af sekunder dog ikke garanteret at være unikke, selvom de teoretisk set oftest vil være unikke, især hvis du begrænser MySQL til en enkelt tråd.

Du kan bruge et UUID hvis du har brug for et unikt nummer, der bestilles midlertidigt.

SELECT UUID() giver noget som:

45f9b8d6-8f00-11e1-8920-842b2b55ce56
 

Og noget tid senere:

004b721a-8f01-11e1-8920-842b2b55ce56
 

De første tre dele af et UUID består af tiden, men de er i rækkefølge fra højeste præcision til mindste, så du skal vende de første tre dele ved hjælp af SUBSTR() og CONCAT() sådan her:

SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4), '-', SUBSTR(UUID(), 1, 8))

Udbytter:

11e1-8f00-45f9b8d6
 

Du kunne åbenbart ikke bruge en funktion som denne som standardværdi, så du bliver nødt til at sætte den i kode, men det er en garanteret unik tidsbestemt værdi. UUID() fungerer på et meget lavere niveau end sekunder (ur-cyklusser), så det er garanteret unikt med hvert opkald og har lav overhead (ingen låsning som auto_increment).

Brug af UUID() på databaseserveren kan foretrækkes frem for at bruge en lignende funktion, såsom PHP's microtime() funktion på applikationsserveren, fordi din databaseserver er mere centraliseret. Du har muligvis mere end én applikations-(web)server, som kan generere kolliderende værdier, og microtime() garanterer stadig ikke unikke værdier.



  1. Sådan bruger du Oracle LISTAGG-funktionen

  2. Den angivne adgangskode til brugerkontoen 'root' er ikke gyldig eller kunne ikke oprette forbindelse til databaseserveren

  3. Hvad er der galt med denne mysql-forespørgsel?

  4. Få alle poster fra MySQL-databasen, der er inden for Google Maps .getBounds?