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

MySQLでトランザクションセーフなSEQUENCEをエミュレートする

    自動インクリメントではニーズが十分でない場合は、 nを使用してアトミックシーケンスメカニズムを作成できます。 このような名前付きシーケンス:

    シーケンスを保存するテーブルを作成します:

    CREATE TABLE sequence (
      seq_name varchar(20) unique not null,
      seq_current unsigned int not null
    );
    

    テーブルに「foo」の行があるとすると、次のような次のシーケンスIDをアトミックに取得できます。

    UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';
    SELECT @next;
    

    ロックは必要ありません。両方のステートメントを同じセッションで実行する必要があるため、選択が発生したときにローカル変数@nextが実際に定義されます。



    1. このSQLクエリが浮動小数点数を比較した結果を返さないのはなぜですか?

    2. MySQLで多対多の関係で選択する

    3. mysqlを使用してローカルホストデータベースを作成するにはどうすればよいですか?

    4. MySQL Galeraクラスターレプリケーションを使用した地理分散クラスターの作成:パート2