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

Cara Membuat Kolom Terhitung di SQLite

Dukungan kolom yang dihasilkan telah ditambahkan ke SQLite dalam versi 3.31.0, yang dirilis pada 22 Januari 2020.

Kolom yang dihasilkan dan kolom yang dihitung adalah hal yang sama. Mereka adalah kolom yang nilainya merupakan fungsi dari kolom lain pada baris yang sama.

Di SQLite, kolom yang dihasilkan dibuat menggunakan GENERATED ALWAYS batasan kolom saat membuat atau mengubah tabel.

Ada dua jenis kolom yang dihasilkan; STORED dan VIRTUAL . Hanya VIRTUAL kolom dapat ditambahkan saat mengubah tabel. Kedua tipe tersebut dapat ditambahkan saat membuat tabel.

Contoh

Berikut ini contoh untuk didemonstrasikan.

CREATE TABLE Products( 
    Id INTEGER PRIMARY KEY, 
    Name TEXT,
    Qty INT,
    Price INT,
    TotalValue INT GENERATED ALWAYS AS (Qty * Price)
);

Jika Anda mendapatkan kesalahan berikut:

Error: near "AS": syntax error

Kemungkinannya adalah, Anda perlu memutakhirkan ke versi SQLite yang lebih baru. Kolom yang dihasilkan hanya diperkenalkan di SQLite 3.31.0.

Sekarang mari kita masukkan data dan pilih.

INSERT INTO Products VALUES 
  (1, 'Hammer', 10, 9.99),
  (2, 'Saw', 5, 11.34),
  (3, 'Wrench', 7, 37.00),
  (4, 'Chisel', 9, 23.00),
  (5, 'Bandage', 70, 120.00);

SELECT * FROM Products;

Hasil:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      10     9.99    99.9      
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

Ini adalah contoh sederhana dan Anda pasti dapat menggunakan ekspresi yang lebih kompleks, misalnya ekspresi yang menggunakan fungsi bawaan.

Virtual vs Tersimpan

Secara default, kolom yang dihitung dibuat sebagai VIRTUAL kolom.

Anda juga memiliki opsi untuk membuat STORED kolom.

Nilai dari VIRTUAL kolom dihitung saat dibaca, sedangkan nilai STORED kolom dihitung saat baris ditulis.

Anda dapat secara eksplisit menggunakan VIRTUAL atau STORED dalam definisi kolom Anda untuk menunjukkan yang mana yang seharusnya. Jika Anda menghilangkan ini, maka itu akan menjadi VIRTUAL .

Inilah cara kita dapat mengubah contoh sebelumnya untuk menggunakan STORED kolom.

CREATE TABLE Products( 
    Id INTEGER PRIMARY KEY, 
    Name TEXT,
    Qty INT,
    Price INT,
    TotalValue INT GENERATED ALWAYS AS (Qty * Price) STORED
);

Terlepas dari apakah itu STORED kolom atau VIRTUAL , memasukkan dan memilih data sama persis.

INSERT INTO Products VALUES 
  (1, 'Hammer', 10, 9.99),
  (2, 'Saw', 5, 11.34),
  (3, 'Wrench', 7, 37.00),
  (4, 'Chisel', 9, 23.00),
  (5, 'Bandage', 70, 120.00);

SELECT * FROM Products;

Hasil:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      10     9.99    99.9      
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

Memperbarui Data di Kolom yang Dihasilkan

Anda tidak dapat memperbarui data secara langsung di kolom yang dihitung. Artinya, Anda tidak dapat menulis langsung ke kolom yang dihitung itu sendiri.

Untuk memperbarui datanya, Anda perlu memperbarui data di kolom dasar yang digunakan dalam ekspresi kolom yang dihitung.

Berikut adalah contoh memperbarui data yang digunakan pada contoh sebelumnya.

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

Hasil:

Id     Name        Qty    Price   TotalValue
-----  ----------  -----  ------  ----------
1      Hammer      5      9.99    49.95     
2      Saw         5      11.34   56.7      
3      Wrench      7      37      259       
4      Chisel      9      23      207       
5      Bandage     70     120     8400      

Dalam hal ini saya mengurangi jumlah palu yang tersedia menjadi 5. Hal ini pada gilirannya mengurangi nilai total palu dalam stok dan nilai di kolom yang dihasilkan (TotalValue ) dikurangi dari 99,99 menjadi 49,95.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chmod gagal:EPERM (Operasi tidak diizinkan) di Android?

  2. Bagaimana SQLite Rtrim() Bekerja

  3. Bagaimana cara melakukan sinkronisasi dengan database lokal dan parse?

  4. Tidak dapat memperbarui baris di Sqlite di Android tetapi tidak membuat kesalahan apa pun

  5. Bagaimana cara mengambil dua respons Json Objek dan Array Json