SQLite memiliki cara yang menarik untuk menangani kolom kenaikan otomatis. Dengan penambahan kolom secara otomatis, maksud saya kolom yang bertambah secara otomatis setiap kali data baru dimasukkan.
Ini mirip dengan IDENTITY
kolom di SQL Server atau AUTO_INCREMENT
kolom di MySQL
.
Artikel ini menjelaskan cara membuat AUTOINCREMENT
kolom di SQLite.
Otomatis Membuat Kolom Kenaikan-Otomatis
Secara default, saat Anda mendefinisikan kolom sebagai INTEGER PRIMARY KEY
, itu akan bertambah secara otomatis setiap kali Anda memasukkan NULL ke dalam kolom itu.
Contoh:
CREATE TABLE Cats(
CatId INTEGER PRIMARY KEY,
CatName
);
Dalam tabel ini, CatId kolom adalah kolom kenaikan otomatis. Ini karena telah didefinisikan menggunakan INTEGER PRIMARY KEY
.
Sekarang, ketika saya memasukkan NULL ke dalam kolom itu, CatId penambahan kolom otomatis:
INSERT INTO Cats VALUES
( NULL, 'Brush' ),
( NULL, 'Scarcat' ),
( NULL, 'Flutter' );
SELECT * FROM Cats;
Hasil:
CatId CatName ---------- ---------- 1 Brush 2 Scarcat 3 Flutter
Penting untuk diperhatikan bahwa Anda dapat mengganti AUTOINCREMENT
nilai dengan memasukkan nilai Anda sendiri. Dengan kata lain, AUTOINCREMENT
hanya memasukkan nilai jika tidak.
Cara kerjanya adalah, NULL
secara otomatis diubah menjadi bilangan bulat yang satu lebih besar dari nilai terbesar kolom itu di atas semua baris lain dalam tabel. Jika tabel kosong, nilainya akan menjadi 1
.
Jika nilai kolom terbesar adalah bilangan bulat terbesar yang mungkin (9223372036854775807), maka SQLite akan memilih kunci yang tidak digunakan secara acak. Ini biasanya berarti bahwa itu akan menggunakan kembali kunci lama yang sebelumnya dihapus. Jika kunci yang tidak digunakan tidak dapat ditemukan, INSERT
operasi gagal dengan SQLITE_FULL
kesalahan.
Pada dasarnya apa artinya ini, jika Anda mengizinkan DELETE
operasi di tabel, maka tidak ada jaminan bahwa semua baris akan berurutan. Ada kemungkinan bahwa beberapa baris akan memiliki nilai lebih tinggi daripada baris yang disisipkan di kemudian hari.
Oleh karena itu, dalam kasus seperti itu, Anda tidak dapat mengandalkan kolom ini jika Anda perlu mengurutkan tabel dalam urutan menaik atau menurun, berdasarkan urutan baris yang dimasukkan.
Untungnya, jika ini menjadi masalah bagi Anda, ada solusinya:AUTOINCREMENT
kata kunci.
Gunakan Kata Kunci AUTOINCREMENT
Atau, Anda dapat memilih untuk secara eksplisit menyetel kolom ke peningkatan otomatis dengan menggunakan AUTOINCREMENT
kata kunci.
Salah satu manfaat menggunakan metode ini adalah menjamin bahwa semua baris akan dalam urutan menaik. Ini karena tidak menggunakan kembali kunci yang dihapus sebelumnya. Setiap kunci akan selalu menjadi satu lebih dari kunci terbesar yang pernah ada di tabel itu. Jika kunci terbesar yang mungkin sebelumnya ada di tabel itu, maka itu tidak akan coba gunakan kunci yang sebelumnya dihapus. INSERT
akan gagal dengan SQLITE_FULL
kode kesalahan.
Kelemahan menggunakan AUTOINCREMENT
kata kuncinya adalah ia menggunakan CPU ekstra, memori, ruang disk, dan overhead I/O disk.
Berikut ini contoh pembuatan kolom peningkatan otomatis dengan AUTOINCREMENT
kata kunci:
CREATE TABLE Dogs(
DogId INTEGER PRIMARY KEY AUTOINCREMENT,
DogName
);
Sekarang masukkan data dan pilih:
INSERT INTO Dogs VALUES
( NULL, 'Yelp' ),
( NULL, 'Woofer' ),
( NULL, 'Fluff' );
SELECT * FROM Dogs;
Hasil:
DogId DogName ---------- ---------- 1 Yelp 2 Woofer 3 Fluff
Jika saya harus menghapus Fluff dari tabel ini, lalu masukkan baris baru (menggunakan NULL
sebagai DogId), DogId baru akan menjadi 4. Dengan kata lain, tidak akan digunakan kembali 3.
Jika kolom telah dibuat tanpa AUTOINCREMENT
kata kunci, maka baris berikutnya akan menggunakan kembali DogId dari 3.
Jika saya memasukkan DogId 9223372036854775807 (bilangan bulat terbesar yang mungkin), saya akan menerima kesalahan berikut pada penyisipan berikutnya yang menentukan NULL
untuk kolom itu:
Error: database or disk is full
Namun, saya dapat secara eksplisit memasukkan nilai yang lebih rendah dari 9223372036854775807, selama nilai tersebut belum digunakan oleh baris lain, dan INSERT
operasi harus berhasil tanpa kesalahan di atas.
Pada dasarnya, setelah Anda mencapai 9223372036854775807, peningkatan otomatis tidak akan berfungsi lagi.
Kolom ditentukan tanpa AUTOINCREMENT
kata kunci tidak memiliki masalah ini. Mereka akan secara otomatis kembali dan mencoba menemukan bilangan bulat yang tidak digunakan untuk digunakan sebagai gantinya. Namun, jika semua bilangan bulat telah digunakan (yaitu tabel sebenarnya berisi 9223372036854775807 baris), maka kolom tersebut pun akan menghasilkan kesalahan di atas.