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