近いうちに(5.6.4)、MySQLはTIMESTAMP列に小数秒を提供しますが、理論的には、特にMySQLを単一に制限した場合、それらはほとんどの場合一意であるとはいえ、小数秒でさえ一意であるとは限りません。スレッド。
一時的に並べ替えられる一意の番号が必要な場合は、 UUIDを使用できます。
SELECT UUID()
次のようなものが得られます:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
そしてしばらくして:
004b721a-8f01-11e1-8920-842b2b55ce56
UUIDの最初の3つの部分は時間で構成されますが、精度が高いものから低いものの順になっているため、次のように使用SUBSTR()
して最初の3つの部分を逆にする必要があります。CONCAT()
SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
収量:
11e1-8f00-45f9b8d6
明らかに、このような関数をデフォルト値として使用することはできなかったため、コードで設定する必要がありますが、これは時間的に順序付けられた一意の一意の値であることが保証されています。UUID()は秒(クロックサイクル)よりもはるかに低いレベルで動作するため、呼び出しごとに一意であることが保証され、オーバーヘッドが低くなります(auto_incrementのようなロックはありません)。
microtime()
データベースサーバーはより集中化されているため、アプリケーションサーバーでのPHPの関数など、同様の関数を使用するよりも、データベースサーバーでUUID()を使用する方が望ましい場合があります。衝突する値を生成する可能性のある複数のアプリケーション(Web)サーバーがある場合でも、microtime()は一意の値を保証しません。