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

last_insert_rowid()がSQLiteでどのように機能するか

    SQLiteにはlast_insert_rowid()という関数があります これは、関数を呼び出したデータベース接続から挿入された最後の行のROWIDを返します。

    last_insert_rowid()がどのように行われるかを示す例を次に示します。 関数はSQLiteで動作します。

    まず、テーブルを作成してデータを挿入しましょう:

    CREATE TABLE Cats( 
        CatId INTEGER PRIMARY KEY, 
        CatName
    );
    
    INSERT INTO Cats VALUES 
        ( NULL, 'Brush' ),
        ( NULL, 'Scarcat' ),
        ( NULL, 'Flutter' );

    これにより、各行のROWIDが自動的に作成されます。したがって、このSQLステートメントは3つの異なるROWIDを作成します。 1、2、および3。

    これで、last_insert_rowid()を使用できます 最後のROWIDの値を返す関数。

    SELECT last_insert_rowid();

    結果:

    3

    予想どおり、最後のROWIDは3です。

    別のテーブルに挿入

    last_insert_rowid()に注意してください テーブルレベルではなく、データベース接続に基づいて機能します。

    したがって、新しいテーブルを作成してから、そのテーブルに行を挿入すると、last_insert_rowid() 値はそのに基づきます 挿入操作。

    CREATE TABLE Dogs( 
        DogId INTEGER PRIMARY KEY, 
        DogName
    );
    
    INSERT INTO Dogs VALUES 
        ( NULL, 'Yelp' ),
        ( NULL, 'Woofer' );
    
    SELECT last_insert_rowid(); 

    結果:

    2

    ちなみに、テーブルを作成したときに、最初の列を自動インクリメント列として定義しました。これは、INTEGER PRIMARY KEYを使用したときに暗黙的に定義されました。 。

    したがって、すべての行を選択すると、最後の行にlast_insert_rowid()が含まれていることがわかります。 その列の値。

    SELECT * FROM Dogs;

    結果:

    DogId       DogName   
    ----------  ----------
    1           Yelp      
    2           Woofer    

    SQLiteでは、タイプINTEGERPRIMARYKEYの列はROWIDのエイリアスです。

    次のクエリはこれを示しています。

    SELECT 
      rowid,
      * 
    FROM Dogs;

    結果:

    DogId       DogId       DogName   
    ----------  ----------  ----------
    1           1           Yelp      
    2           2           Woofer    

    組み込みのSQLite自動インクリメント機能を使用せずに列を作成できることに注意してください。これを行うと、「ID」列の値がROWID値と異なる可能性があります。

    自動インクリメント値を独自の明示的な値でオーバーライドすることもできます。ただし、この場合、ROWID値は引き続きこの明示的な値を反映します。

    INSERT INTO Dogs 
    VALUES ( 789, 'Fluff' );
    
    SELECT 
      rowid,
      * 
    FROM Dogs;
    
    SELECT last_insert_rowid();

    結果:

    DogId       DogId       DogName   
    ----------  ----------  ----------
    1           1           Yelp      
    2           2           Woofer    
    789         789         Fluff     

    そしてもちろん、last_insert_rowid() この最新のROWID値も反映されます。

    SELECT last_insert_rowid();

    結果:

    789

    ROWIDとは何ですか?

    ROWIDは、テーブル内の行を一意に識別する64ビットの符号付き整数キーです。テーブルがWITHOUT ROWIDを使用して定義されていない限り、SQLiteのすべてのテーブルにはROWIDがあります 。

    ROWID値には、大文字と小文字を区別しない特殊な名前rowidのいずれかを使用してアクセスできます。 、oid 、または_rowid_ 列名の代わりに。これらの名前のいずれかを使用するユーザー定義の列がテーブルに含まれている場合、その名前は常に明示的に宣言された列を参照し、整数のROWID値を取得するために使用することはできません。

    自動インクリメント列を使用してテーブルを定義すると、その列はその行にROWID値を自動的に使用します。

    詳細については、SQLiteでのAUTOINCREMENTの動作を参照してください。


    1. SQLintersectionのためにラスベガスに参加して$100を節約

    2. OracleデータベースからプログラムでDDLを生成する方法は?

    3. 空またはnull値をチェックするための最良の方法

    4. MySQLで日時値に時間を追加する方法