sql >> Databasteknik >  >> RDS >> SQLite

Ställ in ett standardvärde för en kolumn i SQLite:DEFAULT Constraint

När du skapar en tabell i SQLite har du möjlighet att lägga till begränsningar för varje kolumn.

En sådan begränsning är DEFAULT begränsning.

DEFAULT begränsning låter dig ange ett värde som ska användas i händelse av att inget värde anges för den kolumnen när en ny rad infogas.

Om du inte använd en DEFAULT sats, då är standardvärdet för en kolumn NULL .

Möjliga standardvärden

Det explicita standardvärdet för en DEFAULT begränsning kan vara något av följande:

  • en strängkonstant
  • en blob-konstant
  • ett signerat nummer
  • vilket konstant uttryck som helst inom parentes.
  • CURRENT_TIME
  • CURRENT_DATE
  • CURRENT_TIMESTAMP
  • NULL

Exempel

Här är ett exempel att visa.

CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName,
    Price DEFAULT 0.00
);

Här har jag lagt till en DEFAULT begränsning för Pris kolumn. I det här fallet är standardvärdet 0,00 .

Nu när jag infogar en ny rad utan att ange ett värde för Pris kolumnen används standardvärdet.

INSERT INTO Products ( ProductId, ProductName ) 
VALUES (1, 'Long Weight');

SELECT * FROM Products;

Resultat:

ProductId   ProductName  Price     
----------  -----------  ----------
1           Long Weight  0.0       

Explicita värden

Naturligtvis används standardvärdet bara när du inte uttryckligen anger ett värde. Om du gör det används det värdet istället.

Här är ett annat exempel. Den här gången ger jag uttryckligen ett värde för det priset kolumn.

INSERT INTO Products ( ProductId, ProductName, Price ) 
VALUES (2, 'Left-Handed Screwdriver', 19.99);

SELECT * FROM Products;

Resultat:

ProductId   ProductName                Price     
----------  -------------------------  ----------
1           Long Weight                0.0       
2           Left-Handed Screwdriver    19.99     

Explicita NULLs

Det föregående exemplet gäller även för uttryckligen tillhandahållen NULL värden.

För att visa detta, här är vad som händer om jag uttryckligen infogar NULL i Pris kolumn.

INSERT INTO Products ( ProductId, ProductName, Price ) 
VALUES (3, 'Elbow Grease', NULL);

SELECT * FROM Products;

Resultat:

ProductId   ProductName               Price     
----------  ------------------------  ----------
1           Long Weight               0.0       
2           Left-Handed Screwdriver   19.99     
3           Elbow Grease                        

Den här gången Pris kolumnen är NULL , eftersom det är vad jag uttryckligen infogade i den kolumnen.

För att förhindra att detta händer, se Hur man konverterar NULL-värden till kolumnens standardvärde när du infogar data i SQLite.

Standardtidsstämpel

I det här exemplet skapar jag en annan tabell. Den här gången satte jag standardvärdet till den aktuella tidsstämpeln.

CREATE TABLE Types( 
    TypeId INTEGER PRIMARY KEY, 
    Type,
    DateInserted DEFAULT CURRENT_TIMESTAMP
);

Och nu till lite data.

INSERT INTO Types (Type) 
VALUES ( 'Hardware' );

SELECT * FROM Types;

Resultat:

TypeId      Type        DateInserted       
----------  ----------  -------------------
1           Hardware    2020-06-05 00:21:57

Tidsstämpeln infogas som förväntat.

Automatisk ökning av värde som standardvärde

Observera att jag i föregående exempel inte heller angav något värde för TypeId kolumn, men det genererade automatiskt ett standardvärde ändå.

I det här fallet berodde inte standardvärdet på en DEFAULT begränsning. Det berodde på att kolumnen är en primärnyckelkolumn som skapades med INTEGER PRIMARY KEY . När du definierar en kolumn med INTEGER PRIMARY KEY , blir kolumnen automatiskt en kolumn för automatisk ökning.

För att visa detta mer ingående, här är vad som händer om jag infogar några fler rader.

INSERT INTO Types (Type) 
VALUES 
  ( 'Software' ),
  ( 'Hardcopy' );

SELECT * FROM Types;

Resultat:

TypeId      Type        DateInserted       
----------  ----------  -------------------
1           Hardware    2020-06-05 00:21:57
2           Software    2020-06-05 00:22:14
3           Hardcopy    2020-06-05 00:22:14

För mer information om automatisk ökning av kolumner, se Hur AUTOINCREMENT fungerar i SQLite och Hur man skapar en automatiskt ökande kolumn i SQLite.

Uttryck som standardvärde

Du kan också använda ett konstant uttryck som standardvärde. För att göra detta måste uttrycket omges inom parentes.

Här är ett exempel.

CREATE TABLE Person( 
    PersonId INTEGER PRIMARY KEY, 
    Name,
    Entered DEFAULT (round(julianday('now'))),
    Deadline  DEFAULT (round(julianday('now')) + 10.5)
);

Och nu till lite data.

INSERT INTO Person (Name) 
VALUES ( 'Fred' );

SELECT * FROM Person;

Resultat:

PersonId    Name        Entered     Deadline  
----------  ----------  ----------  ----------
1           Fred        2459006.0   2459016.5 

Observera att uttrycket måste vara ett konstant uttryck. Ett konstant uttryck är ett uttryck som bara innehåller konstanter.

Om du försöker använda ett uttryck som inte bara innehåller konstanter får du ett felmeddelande.

CREATE TABLE Person( 
    PersonId INTEGER PRIMARY KEY, 
    FirstName,
    LastName,
    UserName DEFAULT (FirstName || LastName)
);

Resultat:

Error: default value of column [UserName] is not constant

  1. Visar data i en RecyclerView

  2. Hur SQLite Count() fungerar

  3. BESTÄLL EFTER datum och tid FÖRE GRUPP EFTER namn i mysql

  4. Ta kontroll över dina data med Microsoft Access