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.