sql >> Databasteknik >  >> RDS >> SQLite

Hur man skapar en beräknad kolumn i SQLite

Genererat kolumnstöd lades till i SQLite i version 3.31.0, som släpptes den 22 januari 2020.

Genererade kolumner och beräknade kolumner är samma sak. De är kolumner vars värden är en funktion av andra kolumner i samma rad.

I SQLite skapas genererade kolumner med GENERATED ALWAYS kolumnbegränsning när du skapar eller ändrar tabellen.

Det finns två typer av genererade kolumner; STORED och VIRTUAL . Endast VIRTUAL kolumner kan läggas till när du ändrar en tabell. Båda typerna kan läggas till när du skapar en tabell.

Exempel

Här är ett exempel att visa.

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

Om du får följande felmeddelande:

Error: near "AS": syntax error

Chansen är stor att du behöver uppgradera till en senare version av SQLite. Genererade kolumner introducerades endast i SQLite 3.31.0.

Låt oss nu infoga data och välja den.

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;

Resultat:

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      

Detta är ett enkelt exempel och du kan säkert använda mer komplexa uttryck, till exempel sådana som använder inbyggda funktioner.

Virtuellt kontra lagrat

Som standard skapas den beräknade kolumnen som en VIRTUAL kolumn.

Du har också möjlighet att skapa en STORED kolumn.

Värdet på en VIRTUAL kolumn beräknas när den läses, medan värdet på en STORED kolumnen beräknas när raden skrivs.

Du kan uttryckligen använda VIRTUAL eller STORED i din kolumndefinition för att ange vilken det ska vara. Om du utelämnar detta blir det VIRTUAL .

Så här kan vi ändra det tidigare exemplet till att använda en STORED kolumn.

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

Oavsett om det är en STORED kolumn eller VIRTUAL , inmatning och val av data är exakt densamma.

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;

Resultat:

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      

Uppdatera data i en genererad kolumn

Du kan inte uppdatera data direkt i en beräknad kolumn. Det vill säga, du kan inte skriva direkt till själva den beräknade kolumnen.

För att uppdatera dess data måste du uppdatera data i de underliggande kolumnerna som används i den beräknade kolumnens uttryck.

Här är ett exempel på uppdatering av data som användes i de tidigare exemplen.

UPDATE Products 
SET Qty = 5 WHERE Id = 1;

SELECT * FROM Products;

Resultat:

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      

I det här fallet minskade jag antalet tillgängliga hammare till 5. Detta minskade i sin tur det totala värdet av hammare i lager och värdet i den genererade kolumnen (TotalValue ) sänkt från 99,99 till 49,95.


  1. Hur man använder mallar i SQL Server Management Studio (SSMS) - SQL Server / TSQL självstudie del 16

  2. Välj alla månader inom ett visst datumintervall, inklusive de med 0-värden

  3. Datumkolumnaritmetik i PostgreSQL-fråga

  4. ListView-kontroll med Ms-Access TreeView