Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Posso obter um TIMESTAMP exclusivo para cada registro no MySQL


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.