SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Jak utworzyć kolumnę obliczeniową w SQLite

Obsługa wygenerowanych kolumn została dodana do SQLite w wersji 3.31.0, która została wydana 22 stycznia 2020 r.

Kolumny generowane i kolumny obliczane to to samo. Są to kolumny, których wartości są funkcją innych kolumn w tym samym wierszu.

W SQLite generowane kolumny są tworzone przy użyciu GENERATED ALWAYS ograniczenie kolumn podczas tworzenia lub modyfikowania tabeli.

Istnieją dwa rodzaje generowanej kolumny; STORED i VIRTUAL . Tylko VIRTUAL kolumny można dodawać podczas zmiany tabeli. Oba typy można dodać podczas tworzenia tabeli.

Przykład

Oto przykład do zademonstrowania.

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

Jeśli pojawi się następujący błąd:

Error: near "AS": syntax error

Możliwe, że musisz uaktualnić do nowszej wersji SQLite. Wygenerowane kolumny zostały wprowadzone tylko w SQLite 3.31.0.

Teraz wstawiamy dane i wybieramy je.

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;

Wynik:

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      

To jest prosty przykład i z pewnością możesz użyć bardziej złożonych wyrażeń, na przykład takich, które używają wbudowanych funkcji.

Wirtualne a przechowywane

Domyślnie obliczona kolumna jest tworzona jako VIRTUAL kolumna.

Masz również możliwość utworzenia STORED kolumna.

Wartość VIRTUAL kolumna jest obliczana podczas odczytu, podczas gdy wartość STORED kolumna jest obliczana podczas zapisywania wiersza.

Możesz jawnie użyć VIRTUAL lub STORED w definicji kolumny, aby wskazać, która powinna być. Jeśli to pominiesz, będzie to VIRTUAL .

Oto jak możemy zmienić poprzedni przykład, aby używał STORED kolumna.

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

Niezależnie od tego, czy jest to STORED kolumna lub VIRTUAL , wprowadzanie i wybieranie danych jest dokładnie takie samo.

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;

Wynik:

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      

Aktualizacja danych w wygenerowanej kolumnie

Nie można aktualizować danych bezpośrednio w kolumnie wyliczanej. Oznacza to, że nie możesz pisać bezpośrednio do samej kolumny obliczeniowej.

Aby zaktualizować jego dane, musisz zaktualizować dane w podstawowych kolumnach, które są używane w wyrażeniu kolumny wyliczanej.

Oto przykład aktualizacji danych użytych w poprzednich przykładach.

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

Wynik:

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      

W tym przypadku zmniejszyłem liczbę dostępnych młotów do 5. To z kolei zmniejszyło całkowitą wartość młotków w magazynie i wartość w wygenerowanej kolumnie (TotalValue ) zmniejszono z 99,99 do 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. Zalecany sposób / polecenie odczytania danych z serwisu internetowego, przeanalizowania tych danych i wstawienia ich do bazy danych SQLite

  2. Jak mogę podzielić długi, pojedynczy SQLiteOpenHelper na kilka klas, po jednej dla każdej tabeli?

  3. Posiadanie SQLite

  4. Aktualizacja bazy danych i aplikacji Android SQLite

  5. SQLite - Utwórz kopię zapasową bazy danych do pliku