Mysql
 sql >> Base de données >  >> RDS >> Mysql

Puis-je obtenir un TIMESTAMP unique pour chaque enregistrement dans MySQL

Un jour prochain (5.6.4), MySQL fournira fractional secondes dans les colonnes TIMESTAMP, cependant, même les fractions de seconde ne sont pas garanties d'être uniques, bien qu'en théorie, elles soient le plus souvent uniques, surtout si vous avez limité MySQL à un seul thread.

Vous pouvez utiliser un UUID si vous avez besoin d'un numéro unique commandé temporairement.

SELECT UUID() donne quelque chose comme :

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

Et quelque temps plus tard :

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

Les trois premières parties d'un UUID consistent en l'heure, cependant, elles sont dans l'ordre de la précision la plus élevée à la moins, vous devez donc inverser les trois premières parties en utilisant SUBSTR() et CONCAT() comme ceci :

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

Rendement :

11e1-8f00-45f9b8d6

Vous ne pouvez évidemment pas utiliser une fonction comme celle-ci comme valeur par défaut, vous devez donc la définir dans le code, mais il s'agit d'une valeur ordonnée temporellement unique garantie. UUID() fonctionne à un niveau beaucoup plus bas que les secondes (cycles d'horloge), il est donc garanti unique à chaque appel et a une faible surcharge (pas de verrouillage comme auto_increment).

L'utilisation de l'UUID() sur le serveur de base de données peut être préférable à l'utilisation d'une fonction similaire, telle que PHP microtime() fonctionner sur le serveur d'application car votre serveur de base de données est plus centralisé. Vous pouvez avoir plus d'un serveur d'application (web), ce qui peut générer des valeurs en collision, et microtime() ne garantit toujours pas des valeurs uniques.