SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Bagaimana last_insert_rowid() Bekerja di SQLite

SQLite memiliki fungsi yang disebut last_insert_rowid() yang mengembalikan ROWID dari sisipan baris terakhir dari koneksi database yang memanggil fungsi tersebut.

Contoh

Berikut adalah contoh untuk mendemonstrasikan bagaimana last_insert_rowid() fungsi bekerja di SQLite.

Pertama, mari buat tabel dan masukkan beberapa data:

CREATE TABLE Cats( 
    CatId INTEGER PRIMARY KEY, 
    CatName
);

INSERT INTO Cats VALUES 
    ( NULL, 'Brush' ),
    ( NULL, 'Scarcat' ),
    ( NULL, 'Flutter' );

Ini akan secara otomatis membuat ROWID untuk setiap baris. Oleh karena itu, pernyataan SQL ini akan membuat tiga ROWID yang berbeda; 1, 2, dan 3.

Sekarang kita dapat menggunakan last_insert_rowid() berfungsi untuk mengembalikan nilai ROWID terakhir.

SELECT last_insert_rowid();

Hasil:

3

Seperti yang diharapkan, ROWID terakhir adalah 3.

Sisipkan ke Tabel yang Berbeda

Perhatikan bahwa last_insert_rowid() bekerja berdasarkan koneksi database, bukan pada tingkat tabel.

Oleh karena itu, jika saya membuat tabel baru, maka masukkan baris ke dalam tabel tersebut, last_insert_rowid() nilai akan didasarkan pada bahwa operasi penyisipan.

CREATE TABLE Dogs( 
    DogId INTEGER PRIMARY KEY, 
    DogName
);

INSERT INTO Dogs VALUES 
    ( NULL, 'Yelp' ),
    ( NULL, 'Woofer' );

SELECT last_insert_rowid(); 

Hasil:

2

Sebagai catatan tambahan, ketika saya membuat tabel, saya mendefinisikan kolom pertama sebagai kolom kenaikan otomatis. Ini didefinisikan secara implisit ketika saya menggunakan INTEGER PRIMARY KEY .

Oleh karena itu, ketika saya memilih semua baris, saya dapat melihat bahwa baris terakhir berisi last_insert_rowid() nilai di kolom itu.

SELECT * FROM Dogs;

Hasil:

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

Dalam SQLite, kolom dengan tipe INTEGER PRIMARY KEY adalah alias untuk ROWID.

Kueri berikut menunjukkan hal ini.

SELECT 
  rowid,
  * 
FROM Dogs;

Hasil:

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

Perhatikan bahwa dimungkinkan untuk membuat kolom tanpa menggunakan fitur peningkatan otomatis SQLite bawaan. Jika Anda melakukan ini, kolom “ID” Anda dapat memiliki nilai yang berbeda dengan nilai ROWID.

Dimungkinkan juga untuk mengganti nilai peningkatan otomatis dengan nilai eksplisit Anda sendiri. Namun, dalam kasus ini, nilai ROWID akan tetap mencerminkan nilai eksplisit ini.

INSERT INTO Dogs 
VALUES ( 789, 'Fluff' );

SELECT 
  rowid,
  * 
FROM Dogs;

SELECT last_insert_rowid();

Hasil:

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

Dan tentu saja, last_insert_rowid() juga akan mencerminkan nilai ROWID terbaru ini.

SELECT last_insert_rowid();

Hasil:

789

Apa itu ROWID?

ROWID adalah kunci integer bertanda 64-bit yang secara unik mengidentifikasi baris dalam tabelnya. Semua tabel di SQLite memiliki ROWID kecuali tabel tersebut didefinisikan menggunakan WITHOUT ROWID .

Nilai ROWID dapat diakses menggunakan salah satu nama case-independen khusus rowid , oid , atau _rowid_ menggantikan nama kolom. Jika tabel berisi kolom yang ditentukan pengguna menggunakan salah satu nama tersebut, maka nama tersebut selalu merujuk ke kolom yang dideklarasikan secara eksplisit dan tidak dapat digunakan untuk mengambil nilai ROWID bilangan bulat.

Saat Anda menentukan tabel dengan kolom kenaikan otomatis, kolom tersebut secara otomatis menggunakan nilai ROWID untuk barisnya.

Lihat Cara Kerja AUTOINCREMENT di SQLite untuk informasi selengkapnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TABEL DROP SQLite

  2. SQLite - Sisipkan Data

  3. SQLite - Ekspor Data ke File CSV

  4. SQLiteOpenHelper:metode onCreate() tidak dipanggil pada perangkat fisik

  5. Format Hasil SQLite sebagai JSON