Binnenkort (5.6.4) zal MySQL fractionele seconden in TIMESTAMP-kolommen zijn zelfs fracties van seconden echter niet gegarandeerd uniek, hoewel ze in theorie meestal uniek zijn, vooral als je MySQL beperkt tot een enkele thread.
U kunt een UUID gebruiken als u een uniek nummer nodig heeft dat tijdelijk wordt besteld.
SELECT UUID()
levert zoiets op als:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
En enige tijd later:
004b721a-8f01-11e1-8920-842b2b55ce56
De eerste drie delen van een UUID bestaan uit de tijd, maar ze zijn in volgorde van de hoogste nauwkeurigheid naar de minste, dus je moet de eerste drie delen omkeren met SUBSTR()
en CONCAT()
zoals dit:
SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
Opbrengsten:
11e1-8f00-45f9b8d6
Je zou een functie als deze natuurlijk niet als standaardwaarde kunnen gebruiken, dus je zou het in code moeten instellen, maar het is een gegarandeerde unieke tijdelijke geordende waarde. UUID() werkt op een veel lager niveau dan seconden (klokcycli), dus het is gegarandeerd uniek bij elke oproep en heeft een lage overhead (geen vergrendeling zoals auto_increment).
Het gebruik van de UUID() op de databaseserver kan de voorkeur hebben boven het gebruik van een vergelijkbare functie, zoals PHP's microtime()
functie op de applicatieserver omdat uw databaseserver meer gecentraliseerd is. Mogelijk hebt u meer dan één applicatieserver (webserver), die botsende waarden kan genereren, en microtime() garandeert nog steeds geen unieke waarden.