Niedługo (5.6.4) MySQL dostarczy ułamkowe sekundy jednak w kolumnach TIMESTAMP nawet ułamki sekund nie są gwarantowane jako unikalne, chociaż teoretycznie najczęściej byłyby unikalne, zwłaszcza jeśli ograniczysz MySQL do jednego wątku.
Możesz użyć UUID jeśli potrzebujesz unikalnego numeru, który jest zamawiany tymczasowo.
SELECT UUID()
daje coś takiego:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
A jakiś czas później:
004b721a-8f01-11e1-8920-842b2b55ce56
Pierwsze trzy części UUID składają się z czasu, jednak są one uporządkowane od najwyższej precyzji do najmniejszej, więc musisz odwrócić pierwsze trzy części za pomocą SUBSTR()
i CONCAT()
tak:
SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
Plony:
11e1-8f00-45f9b8d6
Oczywiście nie możesz użyć funkcji takiej jak ta jako wartości domyślnej, więc musisz ustawić ją w kodzie, ale jest to gwarantowana unikatowa, czasowo uporządkowana wartość. UUID() działa na znacznie niższym poziomie niż sekundy (cykle zegara), więc jest gwarantowane unikatowe przy każdym wywołaniu i ma niski narzut (brak blokowania, takiego jak auto_increment).
Używanie UUID() na serwerze bazy danych może być preferowane niż używanie podobnej funkcji, takiej jak microtime()
PHP działają na serwerze aplikacji, ponieważ serwer bazy danych jest bardziej scentralizowany. Możesz mieć więcej niż jeden serwer aplikacji (sieci), który może generować kolidujące wartości, a microtime() nadal nie gwarantuje unikalnych wartości.