Pewnego dnia wkrótce (5.6.4), MySQL dostarczy fractional seconds w kolumnach znacznika czasu, jednak nawet ułamków sekund nie są gwarantowane jest unikatowy, chociaż teoretycznie, że oni najbardziej często są wyjątkowe, szczególnie jeśli ograniczyłeś MySQL do pojedynczego wątku.
Możesz użyć numeru UUID, jeśli potrzebujesz unikalnego numeru, który jest zamówiony tymczasowo.
SELECT UUID()
daje coś takiego:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
a jakiś czas później:
004b721a-8f01-11e1-8920-842b2b55ce56
Pierwsze trzy porcje UUID składa się z czasem jednak są one w kolejności od najwyższej precyzji co najmniej, więc musisz odwrócić pierwsze trzy części, używając SUBSTR()
i CONCAT()
w ten sposób:
SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
Plony:
11e1-8f00-45f9b8d6
Najwyraźniej nie mógł użyć funkcji jak to jako wartość domyślną, więc trzeba by ustawić go w kodzie, ale jest to zagwarantowane unikalne czasowo nakazał wartość. Funkcja UUID() działa na znacznie niższym poziomie niż sekundy (cykle zegarowe), więc jest gwarantowana unikatowa dla każdego połączenia i ma niski narzut (bez blokowania, np. Auto_increment).
Używanie UUID() na serwerze bazy danych może być preferowane do korzystania z podobnej funkcji, takiej jak funkcja PHP microtime()
na serwerze aplikacji, ponieważ serwer bazy danych jest bardziej scentralizowany. Możesz mieć więcej niż jeden serwer aplikacji (web), który może generować kolidujące wartości, a microtime() nadal nie gwarantuje unikatowych wartości.
Chyba zapobiec rekordy z wprowadzonych w tym samym czasie, nie może być zduplikowane znaczniki czasu. –
@MichaelMior Nie mogę zwiększyć "TIMESTAMP sensivity" ?? .. używając milisekundy itp? Marcus po prostu używając kwerendy Wybierz. gołym okiem widzę to. –
MySQL nie obsługuje mikrosekund (ale, 5.6.4 będzie), więc sugerowałbym, żeby było pole z liczbami całkowitymi. – Kostis