SQLite
 sql >> база данни >  >> RDS >> SQLite

Как да създадете изчислена колона в SQLite

Поддръжката на генерирани колони беше добавена към SQLite във версия 3.31.0, която беше пусната на 22 януари 2020 г.

Генерираните колони и изчислените колони са едно и също нещо. Те са колони, чиито стойности са функция на други колони в същия ред.

В SQLite генерираните колони се създават с помощта на GENERATED ALWAYS колона-ограничение при създаване или промяна на таблицата.

Има два вида генерирани колони; STORED и VIRTUAL . Само VIRTUAL колони могат да се добавят при промяна на таблица. И двата типа могат да се добавят при създаване на таблица.

Пример

Ето пример за демонстрация.

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

Ако получите следната грешка:

Error: near "AS": syntax error

Вероятно е, че трябва да надстроите до по-нова версия на SQLite. Генерираните колони бяха въведени само в SQLite 3.31.0.

Сега нека да вмъкнем данни и да ги изберете.

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;

Резултат:

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      

Това е прост пример и със сигурност можете да използвате по-сложни изрази, например такива, които използват вградени функции.

Виртуално срещу съхранено

По подразбиране изчислената колона се създава като VIRTUAL колона.

Освен това имате възможност да създадете STORED колона.

Стойността на VIRTUAL колоната се изчислява при четене, докато стойността на STORED колоната се изчислява, когато редът е написан.

Можете изрично да използвате VIRTUAL или STORED във вашата колона, за да посочите коя трябва да бъде. Ако пропуснете това, то ще бъде VIRTUAL .

Ето как можем да променим предишния пример, за да използваме STORED колона.

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

Независимо дали е STORED колона или VIRTUAL , въвеждането и избирането на данните е абсолютно същото.

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;

Резултат:

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      

Актуализиране на данни в генерирана колона

Не можете да актуализирате данните директно в изчислена колона. Тоест, не можете да пишете директно в самата изчислена колона.

За да актуализирате неговите данни, трябва да актуализирате данните в основните колони, които се използват в израза на изчислената колона.

Ето пример за актуализиране на данните, използвани в предишните примери.

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

Резултат:

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      

В този случай намалих броя на наличните чукове до 5. Това от своя страна намали общата стойност на чуковете на склад и стойността в генерираната колона (TotalValue ) намален от 99,99 на 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. Разбиране на урока за запазване на данни на Android.com в SQL бази данни

  2. Базата данни не можа да се отвори в режим на четене/запис

  3. Използване на запаметена процедура Sqlite в Android

  4. SQLite NOT NULL ограничение

  5. Как да изпълним SQLite заявка в приложение за Android?