sql >> データベース >  >> RDS >> Mysql

MySQLのすべてのレコードに対して一意のタイムスタンプを取得できますか?

    近いうちに(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のようなロックはありません)。

    PHPのmicrotime()などの同様の関数を使用するよりも、データベースサーバーでUUID()を使用する方が望ましい場合があります。 データベースサーバーがより集中化されているため、アプリケーションサーバーで機能します。衝突する値を生成する可能性のある複数のアプリケーション(Web)サーバーがある場合でも、microtime()は一意の値を保証しません。



    1. 結合テーブルを使用したMySQLGreatestNの結果

    2. 外部キー、ブロック、および更新の競合

    3. カンマ区切り値でいっぱいのvarcharをSQLServerIN関数に渡す

    4. 2つの一意の列を持つ最新の日付で行を選択するSQL