Un giorno presto (5.6.4), MySQL fornirà fractional secondi nelle colonne TIMESTAMP, tuttavia, non è garantito che anche i secondi frazionari siano unici, anche se in teoria sarebbero molto spesso unici, specialmente se si limita MySQL a un singolo thread.
Puoi utilizzare un UUID se hai bisogno di un numero univoco ordinato temporaneamente.
SELECT UUID()
produce qualcosa come:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
E qualche tempo dopo:
004b721a-8f01-11e1-8920-842b2b55ce56
Le prime tre porzioni di un UUID sono costituite dal tempo, tuttavia, sono in ordine dalla massima precisione alla minima, quindi è necessario invertire le prime tre porzioni utilizzando SUBSTR()
e CONCAT()
così:
SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
Rendimento:
11e1-8f00-45f9b8d6
Ovviamente non puoi usare una funzione come questa come valore predefinito, quindi dovresti impostarla nel codice, ma è un valore univoco garantito temporalmente ordinato. UUID() funziona a un livello molto più basso dei secondi (cicli di clock), quindi è garantito unico con ogni chiamata e ha un sovraccarico ridotto (nessun blocco come auto_increment).
L'utilizzo dell'UUID() sul server del database può essere preferibile all'utilizzo di una funzione simile, come microtime()
di PHP funzione sul server delle applicazioni perché il server del database è più centralizzato. Potresti avere più di un server di applicazioni (web), che potrebbe generare valori in collisione e microtime() non garantisce ancora valori univoci.