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

PENINGKATAN OTOMATIS SQLite

Ringkasan :dalam tutorial ini, Anda akan belajar tentang SQLite AUTOINCREMENT atribut kolom dan kapan menggunakannya di tabel Anda.

Pengantar SQLite ROWID tabel

Setiap kali Anda membuat tabel tanpa menentukan WITHOUT ROWID opsi, Anda mendapatkan kolom kenaikan otomatis implisit yang disebut rowid . rowid kolom menyimpan bilangan bulat bertanda 64-bit yang secara unik mengidentifikasi baris dalam tabel.

Mari kita lihat contoh berikut.

Pertama, buat tabel baru bernama people yang memiliki dua kolom:first_name, dan last_name :

CREATE TABLE people (
   first_name TEXT NOT NULL,
   last_name TEXT NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Cobalah

Kedua, masukkan baris ke dalam people tabel menggunakan INSERT berikut ini pernyataan:

INSERT INTO people (first_name, last_name)
VALUES('John', 'Doe');Code language: SQL (Structured Query Language) (sql)

Cobalah

Ketiga, kueri data dari people tabel menggunakan SELECT berikut ini pernyataan:

SELECT
   rowid,
   first_name,
   last_name
FROM
   people;Code language: SQL (Structured Query Language) (sql)

Cobalah

Seperti yang Anda lihat dengan jelas dari output, SQLite secara implisit membuat kolom bernama rowid dan secara otomatis memberikan nilai integer setiap kali Anda memasukkan baris baru ke dalam tabel.

Perhatikan bahwa Anda juga dapat merujuk ke rowid kolom menggunakan aliasnya:_rowid_ dan oid .

Saat Anda membuat tabel yang memiliki INTEGER PRIMARY KEY kolom, kolom ini adalah alias dari rowid kolom.

Pernyataan berikut menjatuhkan tabel people dan membuatnya kembali. Namun kali ini, kami menambahkan kolom lain bernama person_id yang tipe datanya INTEGER dan batasan kolom adalah PRIMARY KEY :

DROP TABLE people;

CREATE TABLE people (
   person_id INTEGER PRIMARY KEY,
   first_name TEXT NOT NULL,
   last_name TEXT NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Cobalah

Dalam hal ini, person_id kolom sebenarnya adalah rowid kolom.

Bagaimana SQLite menetapkan nilai integer ke rowid kolom?

Jika Anda tidak menentukan rowid nilai atau Anda menggunakan NULL nilai ketika Anda memasukkan baris baru, SQLite secara otomatis menetapkan bilangan bulat berurutan berikutnya, yang lebih besar dari rowid terbesar di meja. rowid nilai dimulai dari 1.

Nilai maksimum darirowid kolomnya adalah 9,223,372,036,854,775,807 , yang sangat besar. Jika data Anda mencapai nilai maksimum ini dan Anda mencoba memasukkan baris baru, SQLite akan menemukan bilangan bulat yang tidak digunakan dan menggunakannya. Jika SQLite tidak dapat menemukan bilangan bulat yang tidak digunakan, itu akan mengeluarkan SQLITE_FULL kesalahan. Selain itu, jika Anda menghapus beberapa baris dan menyisipkan baris baru, SQLite akan mencoba menggunakan kembali rowid nilai dari baris yang dihapus.

Mari kita uji.

Pertama, masukkan baris dengan nilai maksimum ke dalam people tabel.

INSERT INTO people (person_id,first_name,last_name)
VALUES(	9223372036854775807,'Johnathan','Smith');Code language: SQL (Structured Query Language) (sql)

Cobalah

Kedua, masukkan baris lain tanpa menentukan nilai untuk person_id kolom:

INSERT INTO people (first_name,last_name)
VALUES('William','Gate');Code language: SQL (Structured Query Language) (sql)

Cobalah

Seperti yang ditunjukkan dengan jelas pada output, baris baru menerima bilangan bulat yang tidak digunakan.

Pertimbangkan contoh lain.

Pertama, buat tabel baru dengan nama t1 yang memiliki satu kolom:

CREATE TABLE t1(c text);Code language: SQL (Structured Query Language) (sql)

Kedua, masukkan beberapa baris ke dalam t1 tabel:

INSERT INTO t1(c) VALUES('A');
INSERT INTO t1(c) values('B');
INSERT INTO t1(c) values('C');
INSERT INTO t1(c) values('D');
Code language: SQL (Structured Query Language) (sql)

Ketiga, query data dari t1 tabel:

SELECT rowid, c FROM t1;Code language: SQL (Structured Query Language) (sql)

Keempat, hapus semua baris t1 tabel:

DELETE FROM t1;Code language: SQL (Structured Query Language) (sql)

Kelima, masukkan beberapa baris ke dalam t1 tabel:

INSERT INTO t1(c) values('E');
INSERT INTO t1(c) values('F');
INSERT INTO t1(c) values('G');Code language: SQL (Structured Query Language) (sql)

Terakhir, kueri data dari t1 tabel:

SELECT rowid, c FROM t1;
Code language: SQL (Structured Query Language) (sql)

Seperti yang Anda lihat, rowid 1, 2 dan 3 telah digunakan kembali untuk baris baru.

SQLite AUTOINCREMENT atribut kolom

SQLite menyarankan agar Anda tidak menggunakan AUTOINCREMENT atribut karena:

AUTOINCREMENT kata kunci memaksakan CPU ekstra, memori, ruang disk, dan overhead I/O disk dan harus dihindari jika tidak benar-benar diperlukan. Biasanya tidak diperlukan.

Selain itu, cara SQLite memberikan nilai untuk AUTOINCREMENT kolom sedikit berbeda dari cara yang dilakukannya untuk rowid kolom.

Perhatikan contoh berikut.

Pertama, jatuhkan dan buat ulang people meja. Kali ini kita menggunakan AUTOINCREMENT kolom atribut:

DROP TABLE people;

CREATE TABLE people (
   person_id INTEGER PRIMARY KEY AUTOINCREMENT,
   first_name text NOT NULL,
   last_name text NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Cobalah

Kedua, masukkan baris dengan rowid maksimum nilai ke dalam people tabel.

INSERT INTO people (person_id,first_name,last_name)
VALUES(9223372036854775807,'Johnathan','Smith');Code language: SQL (Structured Query Language) (sql)

Cobalah

Ketiga, masukkan baris lain ke dalam people tabel.

INSERT INTO people (first_name,last_name)
VALUES('John','Smith');Code language: SQL (Structured Query Language) (sql)

Cobalah

Kali ini, SQLite mengeluarkan pesan kesalahan karena person_id kolom tidak menggunakan kembali nomor seperti rowid kolom.

[Err] 13 - database or disk is fullCode language: SQL (Structured Query Language) (sql)

Kapan Anda harus menggunakan AUTOINCREMENT atribut kolom?

Tujuan utama menggunakan atribut AUTOINCREMENT adalah untuk mencegah SQLite menggunakan kembali nilai yang belum digunakan atau nilai dari baris yang dihapus sebelumnya.

Jika Anda tidak memiliki persyaratan seperti ini, Anda tidak boleh menggunakan AUTOINCREMENT atribut di kunci utama.

Dalam tutorial ini, Anda telah mempelajari bagaimana SQLite AUTOINCREMENT atribut bekerja dan bagaimana pengaruhnya terhadap cara SQLite memberikan nilai ke kolom kunci utama.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lampirkan String dalam Kutipan Tunggal di Hasil Query SQLite

  2. Bagaimana cara memperbarui dan menghapus daftar Lihat data dalam database SQLite dengan pendengar klik?

  3. nullvalue:Tampilkan Nilai NULL di SQLite

  4. Buat Batasan CHECK di SQLite

  5. Periksa apakah string kolom dalam database adalah substring dari kueri di sqlite