sql >> Database >  >> RDS >> Mysql

Kan ik een unieke TIMESTAMP krijgen voor elk record in MySQL?

Binnenkort (5.6.4) zal MySQL fractionele seconden in TIMESTAMP-kolommen zijn zelfs fracties van seconden echter niet gegarandeerd uniek, hoewel ze in theorie meestal uniek zijn, vooral als je MySQL beperkt tot een enkele thread.

U kunt een UUID gebruiken als u een uniek nummer nodig heeft dat tijdelijk wordt besteld.

SELECT UUID() levert zoiets op als:

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

En enige tijd later:

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

De eerste drie delen van een UUID bestaan ​​uit de tijd, maar ze zijn in volgorde van de hoogste nauwkeurigheid naar de minste, dus je moet de eerste drie delen omkeren met SUBSTR() en CONCAT() zoals dit:

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

Opbrengsten:

11e1-8f00-45f9b8d6

Je zou een functie als deze natuurlijk niet als standaardwaarde kunnen gebruiken, dus je zou het in code moeten instellen, maar het is een gegarandeerde unieke tijdelijke geordende waarde. UUID() werkt op een veel lager niveau dan seconden (klokcycli), dus het is gegarandeerd uniek bij elke oproep en heeft een lage overhead (geen vergrendeling zoals auto_increment).

Het gebruik van de UUID() op de databaseserver kan de voorkeur hebben boven het gebruik van een vergelijkbare functie, zoals PHP's microtime() functie op de applicatieserver omdat uw databaseserver meer gecentraliseerd is. Mogelijk hebt u meer dan één applicatieserver (webserver), die botsende waarden kan genereren, en microtime() garandeert nog steeds geen unieke waarden.



  1. Wat is de huidige weergave APPL_TOP snapshots

  2. MySQL-implementatie met CUDA

  3. Mysql-overeenkomst...tegen vs. eenvoudig zoals %term%

  4. Een MySQL-installatie maken voor lokaal testen