Algum dia em breve (5.6.4), o MySQL fornecerá fractional segundos em colunas TIMESTAMP, no entanto, mesmo segundos fracionários não são garantidos como únicos, embora teoricamente eles sejam únicos, especialmente se você limitar o MySQL a um único thread.
Você pode usar um UUID se você precisar de um número exclusivo que seja ordenado temporariamente.
SELECT UUID()
produz algo como:45f9b8d6-8f00-11e1-8920-842b2b55ce56
E algum tempo depois:
004b721a-8f01-11e1-8920-842b2b55ce56
As três primeiras partes de um UUID consistem no tempo, no entanto, elas estão em ordem da maior precisão para a menor, então você precisa reverter as três primeiras partes usando
SUBSTR()
e CONCAT()
assim:SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
Rendimentos:
11e1-8f00-45f9b8d6
Você obviamente não poderia usar uma função como essa como um valor padrão, então você teria que defini-la no código, mas é um valor ordenado temporalmente único garantido. UUID() funciona em um nível muito mais baixo do que segundos (ciclos de clock), por isso é garantido exclusivo com cada chamada e tem baixa sobrecarga (sem bloqueio como auto_increment).
Usar o UUID() no servidor de banco de dados pode ser preferível a usar uma função semelhante, como
microtime()
do PHP funcionam no servidor de aplicativos porque seu servidor de banco de dados é mais centralizado. Você pode ter mais de um servidor de aplicativo (web), o que pode gerar valores em colisão, e o microtime() ainda não garante valores exclusivos.