Algún día (5.6.4), MySQL proporcionará fractional seconds en las columnas de fecha y hora, sin embargo, incluso fracciones de segundo, no se garantiza que sea único, aunque teóricamente, tendrían más a menudo ser único, especialmente si limita MySQL a un solo hilo.
Puede usar un UUID si necesita un número único que se solicite temporalmente.
SELECT UUID()
produce algo así como:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
y algún tiempo después:
004b721a-8f01-11e1-8920-842b2b55ce56
Los primeros tres porciones de un UUID consisten en el tiempo, sin embargo, están en orden de mayor precisión al menos, por lo que necesitaría invertir las tres primeras porciones usando SUBSTR()
y CONCAT()
así:
SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
Rendimiento:
11e1-8f00-45f9b8d6
Obviamente no podría utilizar una función como esta como un valor por defecto, por lo que tendría para configurarlo en el código, pero es un valor único ordenado temporalmente garantizada. UUID() funciona a un nivel mucho más bajo que los segundos (ciclos de reloj), por lo que se garantiza que es único con cada llamada y tiene una sobrecarga baja (sin bloqueo como autoincremento).
El uso del UUID() en el servidor de la base de datos puede ser preferible al uso de una función similar, como la función microtime()
de PHP en el servidor de aplicaciones porque el servidor de la base de datos está más centralizado. Es posible que tenga más de un servidor de aplicaciones (web), que puede generar valores colisionantes, y microtime() aún no garantiza valores únicos.
A menos que evite que se inserten registros al mismo tiempo, puede haber marcas de tiempo duplicadas. –
@MichaelMior ¿No puedo aumentar la "sensibilidad TIMESTAMP" ?? .. usando milisegundos, etc.? Marcus Just Usando una consulta Select. a simple vista puedo verlo. –
MySQL no admite microsegundos (sin embargo, 5.6.4 lo hará), por lo que sugeriría ir con un campo entero. – Kostis