sql >> Databáze >  >> RDS >> Mysql

Mohu získat jedinečný TIMESTAMP pro každý záznam v MySQL

Již brzy (5.6.4) poskytne MySQL frakční sekund ve sloupcích TIMESTAMP však ani zlomky sekund nejsou zaručeny, že budou jedinečné, i když teoreticky by většinou jedinečné byly, zvláště pokud byste MySQL omezili na jedno vlákno.

Můžete použít UUID pokud potřebujete jedinečné číslo, které je objednáno dočasně.

SELECT UUID() dává něco jako:

45f9b8d6-8f00-11e1-8920-842b2b55ce56

A o chvíli později:

004b721a-8f01-11e1-8920-842b2b55ce56

První tři části UUID se skládají z času, jsou však v pořadí od nejvyšší přesnosti po nejmenší, takže budete muset obrátit první tři části pomocí SUBSTR() a CONCAT() takhle:

SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
  '-', SUBSTR(UUID(), 1, 8))

Výtěžky:

11e1-8f00-45f9b8d6

Zjevně byste nemohli použít funkci jako je tato jako výchozí hodnotu, takže byste ji museli nastavit v kódu, ale je to zaručeně jedinečná dočasně uspořádaná hodnota. UUID() pracuje na mnohem nižší úrovni než sekundy (cykly hodin), takže je zaručeno, že je jedinečné při každém volání a má nízkou režii (žádné zamykání jako auto_increment).

Použití UUID() na databázovém serveru může být preferováno před použitím podobné funkce, jako je PHP microtime() fungovat na aplikačním serveru, protože váš databázový server je více centralizovaný. Můžete mít více než jeden aplikační (webový) server, který může generovat kolidující hodnoty, a microtime() stále nezaručuje jedinečné hodnoty.



  1. Potíže s velkými daty:Hardware nebo software… Spotřebiče…

  2. Zabalte některé vstupy do zaškrtávacího políčka a odešlete do databáze

  3. Jak bezpečné je vlákno EnableWriteAheadLogging v kontextu skutečného použití a dokumentace SQLite?

  4. Vytvářejte, nelámejte, výkon serveru SQL