sql >> Database >  >> RDS >> SQLite

Een berekende kolom maken in SQLite

Ondersteuning voor gegenereerde kolommen is toegevoegd aan SQLite in versie 3.31.0, die werd uitgebracht op 22 januari 2020.

Gegenereerde kolommen en berekende kolommen zijn hetzelfde. Het zijn kolommen waarvan de waarden een functie zijn van andere kolommen in dezelfde rij.

In SQLite worden gegenereerde kolommen gemaakt met de GENERATED ALWAYS kolombeperking bij het maken of wijzigen van de tabel.

Er zijn twee soorten gegenereerde kolommen; STORED en VIRTUAL . Alleen VIRTUAL kolommen kunnen worden toegevoegd bij het wijzigen van een tabel. Beide typen kunnen worden toegevoegd bij het maken van een tabel.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

Als u de volgende foutmelding krijgt:

Error: near "AS": syntax error

De kans is groot dat u moet upgraden naar een latere versie van SQLite. Gegenereerde kolommen zijn alleen geïntroduceerd in SQLite 3.31.0.

Laten we nu gegevens invoegen en selecteren.

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;

Resultaat:

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      

Dit is een eenvoudig voorbeeld en je kunt zeker complexere uitdrukkingen gebruiken, bijvoorbeeld die met ingebouwde functies.

Virtueel versus opgeslagen

Standaard wordt de berekende kolom gemaakt als een VIRTUAL kolom.

Je hebt ook de mogelijkheid om een ​​STORED . aan te maken kolom.

De waarde van een VIRTUAL kolom wordt berekend wanneer deze wordt gelezen, terwijl de waarde van een STORED kolom wordt berekend wanneer de rij wordt geschreven.

U kunt expliciet VIRTUAL . gebruiken of STORED in uw kolomdefinitie om aan te geven welke het moet zijn. Als je dit weglaat, wordt het VIRTUAL .

Hier is hoe we het vorige voorbeeld kunnen wijzigen om een ​​STORED . te gebruiken kolom.

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

Ongeacht of het een STORED . is kolom of VIRTUAL , het invoeren en selecteren van de gegevens is precies hetzelfde.

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;

Resultaat:

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      

Gegevens bijwerken in een gegenereerde kolom

U kunt gegevens niet rechtstreeks in een berekende kolom bijwerken. Dat wil zeggen, u kunt niet rechtstreeks naar de berekende kolom zelf schrijven.

Om de gegevens bij te werken, moet u de gegevens bijwerken in de onderliggende kolommen die worden gebruikt in de uitdrukking van de berekende kolom.

Hier is een voorbeeld van het bijwerken van de gegevens die in de vorige voorbeelden zijn gebruikt.

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

Resultaat:

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      

In dit geval heb ik het aantal beschikbare hamers teruggebracht tot 5. Dit verminderde op zijn beurt de totale waarde van de hamers in voorraad en de waarde in de gegenereerde kolom (TotalValue ) verlaagd van 99,99 naar 49,95.


  1. 10 Handige Microsoft Access-snelkoppelingen wanneer u werkt met besturingselementen op formulieren en rapporten

  2. Waar worden '$$' voor gebruikt in PL/pgSQL

  3. Problemen met Knee-Jerk Performance voorkomen

  4. Sqlite voegt geen gegevens in de 2e tabel in