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

MySQLでシーケンスを作成するにはどうすればよいですか?

    これは、が提案するソリューションです。 MySQlマニュアル

    exprがLAST_INSERT_ID()の引数として指定されている場合、引数の値は関数によって返され、LAST_INSERT_ID()によって返される次の値として記憶されます。これは、シーケンスをシミュレートするために使用できます:

    シーケンスカウンターを保持するテーブルを作成し、初期化します:

        mysql> CREATE TABLE sequence (id INT NOT NULL);
        mysql> INSERT INTO sequence VALUES (0);
    

    この表を使用して、次のようなシーケンス番号を生成します。

        mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
        mysql> SELECT LAST_INSERT_ID();
    

    UPDATEステートメントはシーケンスカウンターをインクリメントし、LAST_INSERT_ID()への次の呼び出しで更新された値を返します。 SELECTステートメントはその値を取得します。 mysql_insert_id()CAPI関数を使用して値を取得することもできます。 23.8.7.37項「mysql_insert_id()」を参照してください。

    LAST_INSERT_ID()を呼び出さなくてもシーケンスを生成できますが、このように関数を使用することの有用性は、ID値が最後に自動的に生成された値としてサーバーに保持されることです。複数のクライアントがUPDATEステートメントを発行し、SELECTステートメント(またはmysql_insert_id())を使用して、独自のシーケンス値を生成する他のクライアントに影響を与えたり影響を受けたりすることなく、独自のシーケンス値を取得できるため、マルチユーザーにとって安全です。



    1. クエリ内でDML操作を実行できない解決策はありますか?

    2. SQLite Trim()のしくみ

    3. SQLServerの句によるグループ化を理解する-SQLServer/TSQLチュートリアルパート130

    4. Oracle日時関数(全リスト)