sql >> Base de Datos >  >> RDS >> Mysql

¿Puedo obtener un TIMESTAMP único para cada registro en MySQL?

Algún día pronto (5.6.4), MySQL proporcionará fractional segundos en las columnas TIMESTAMP, sin embargo, ni siquiera se garantiza que las fracciones de segundo sean únicas, aunque teóricamente, lo serán con mayor frecuencia, especialmente si limita MySQL a un solo subproceso.

Puede usar un UUID si necesita un número único que se ordene temporalmente.

SELECT UUID() produce algo como:

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

Y algún tiempo después:

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

Las primeras tres partes de un UUID consisten en el tiempo, sin embargo, están en orden de mayor a menor precisión, por lo que deberá invertir las primeras tres partes usando SUBSTR() y CONCAT() así:

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

Rendimientos:

11e1-8f00-45f9b8d6

Obviamente, no podría usar una función como esta como un valor predeterminado, por lo que tendría que configurarlo en el código, pero es un valor único ordenado temporalmente garantizado. 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 auto_increment).

Se puede preferir usar el UUID() en el servidor de la base de datos que usar una función similar, como microtime() de PHP. funcionan en el servidor de aplicaciones porque su servidor de base de datos está más centralizado. Es posible que tenga más de un servidor de aplicaciones (web), lo que puede generar valores en conflicto, y microtime() todavía no garantiza valores únicos.