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

Co to jest wygenerowana kolumna?

Niektóre systemy zarządzania bazami danych (DBMS) zawierają funkcję zwaną generowanymi kolumnami.

Nazywane również „kolumnami wyliczanymi”, kolumny generowane są podobne do zwykłej kolumny, z wyjątkiem tego, że wartość kolumny generowanej pochodzi z wyrażenia, które oblicza wartości z innych kolumn.

Innymi słowy, wartość wygenerowanej kolumny jest obliczana z innych kolumn.

Przykład

Oto podstawowy przykład pokazujący, jak działają wygenerowane kolumny.

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

Ten przykład został utworzony w SQLite i używa składni SQLite do tworzenia wygenerowanej kolumny. Ta składnia używa GENERATED ALWAYS wiązanie-kolumny.

GENERATED ALWAYS część jest opcjonalna w SQLite, więc możesz po prostu użyć AS .

Właściwie GENERATED ALWAYS część jest również opcjonalna w MySQL i nie jest nawet zdefiniowana w TSQL (rozszerzenie SQL dla SQL Server), więc AS słowo kluczowe to wszystko, czego potrzebujesz (wraz z rzeczywistym wyrażeniem).

Wyrażenie określa rzeczywistą wartość, którą będzie przechowywać kolumna. W moim przykładzie część, która czyta (Qty * Price) jest wyrażeniem, które określa tę wartość.

W tym przypadku jest to po prostu pomnożenie ilości (liczby każdego produktu) przez cenę każdego produktu.

Dlatego ta wygenerowana kolumna zawiera całkowitą wartość każdego towaru w ekwipunku.

Jeśli wstawimy dane i je zaznaczymy, możemy zobaczyć obliczoną wartość wygenerowanej kolumny.

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      

Jeśli spojrzymy na pierwszy rząd, zobaczymy, że jest 10 młotków w cenie 9,99 każdy. Wygenerowana kolumna mnoży te dwie wartości razem i otrzymujemy 99,9.

Jeśli zmniejszymy liczbę młotków, generowana kolumna da inną wartość.

Oto przykład.

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ę młotków do 5, a wygenerowana kolumna obliczyła zatem wartość 49,95.

Rodzaje generowanych kolumn

Istnieją dwa rodzaje generowanych kolumn; przechowywane i wirtualne.

Niektóre DBMS mogą używać nieco innej terminologii, na przykład SQL Server używa terminu „trwałe” zamiast „przechowywane”. Tak czy inaczej, odnosi się do tego samego.

  • VIRTUAL :Wartości kolumn nie są przechowywane, ale są oceniane podczas odczytywania wierszy.
  • STORED :Wartości kolumn są oceniane i przechowywane, gdy wiersze są wstawiane lub aktualizowane.

STORED kolumny wymagają zatem miejsca do przechowywania, podczas gdy VIRTUAL kolumny nie.

Oznacza to jednak również, że VIRTUAL kolumny zużywają więcej cykli procesora podczas odczytu.

Zalety generowanych kolumn

Wygenerowane kolumny mogą zaoszczędzić czas podczas pisania zapytań, zmniejszyć liczbę błędów i poprawić wydajność.

Wygenerowane kolumny mogą służyć jako sposób na uproszczenie i ujednolicenie zapytań. Złożony warunek można zdefiniować jako wygenerowaną kolumnę, a następnie odnieść się do niej z wielu zapytań w tabeli. Pomaga to zapewnić, że wszystkie stosują dokładnie ten sam warunek.

Przechowywane wygenerowane kolumny mogą być używane jako zmaterializowana pamięć podręczna w przypadku skomplikowanych warunków, których obliczanie w locie jest kosztowne.

Ograniczenia generowanych kolumn

Wygenerowane kolumny zazwyczaj mają ograniczenia w porównaniu z normalnymi kolumnami, chociaż zakres ograniczeń może być określony przez DBMS.

Na przykład wygenerowane kolumny są zazwyczaj zdolne do obliczania wartości tylko z kolumn w tym samym wierszu. Jednak to ograniczenie można pokonać (przynajmniej w SQL Server), używając funkcji zdefiniowanej przez użytkownika jako części wyrażenia kolumny wyliczanej.

Zobacz poniższe linki, aby przeczytać więcej o implementacji generowanych kolumn w różnych DBMS.

Oficjalna dokumentacja

Oto dokumentacja niektórych popularnych DBMS, która zawiera ograniczenia ich implementacji generowanych kolumn:

  • Kolumny obliczane w SQL Server
  • Wygenerowane kolumny w PostgreSQL (wersja 12)
  • Wygenerowane kolumny w MySQL (wersja 8.0)
  • Wygenerowane kolumny w SQLite


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jeśli moja tabela ma 4 kolumny i chcę pobrać trzecią kolumnę, co mam zrobić.

  2. sqliteLog 14:nie można otworzyć pliku w wierszu

  3. Wyświetl wyniki zapytania SQLite za pomocą wyjścia pionowego

  4. Funkcje daty i czasu SQLite

  5. SQLiteDatabase android IllegalStateException