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

Buat Kolom Kenaikan Otomatis di SQLite

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sqlite3 tidak memasukkan beberapa baris secara berurutan

  2. Peringatan Python dan SQLite

  3. Android:Bagaimana cara meminta ulang Kursor untuk menyegarkan ListView setelah menghapus baris basis data?

  4. Apa tujuan peta proyeksi Android di penyedia konten?

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