Når du opretter en tabel i SQLite, har du mulighed for at tilføje begrænsninger til hver kolonne.
En sådan begrænsning er DEFAULT
begrænsning.
DEFAULT
begrænsning giver dig mulighed for at angive en værdi, der skal bruges i tilfælde af, at der ikke er angivet nogen værdi for den kolonne, når en ny række indsættes.
Hvis du ikke brug en DEFAULT
klausul, så er standardværdien for en kolonne NULL
.
Mulige standardværdier
Den eksplicitte standardværdi for en DEFAULT
begrænsning kan være en af følgende:
- en strengkonstant
- en klatkonstant
- et underskrevet nummer
- ethvert konstant udtryk indesluttet i parentes.
CURRENT_TIME
CURRENT_DATE
CURRENT_TIMESTAMP
NULL
Eksempel
Her er et eksempel til at demonstrere.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price DEFAULT 0.00
);
Her tilføjede jeg en DEFAULT
begrænsning af prisen kolonne. I dette tilfælde er standardværdien 0,00 .
Når jeg nu indsætter en ny række uden at angive en værdi for Pris kolonne, bruges standardværdien.
INSERT INTO Products ( ProductId, ProductName )
VALUES (1, 'Long Weight');
SELECT * FROM Products;
Resultat:
ProductId ProductName Price ---------- ----------- ---------- 1 Long Weight 0.0
Eksplicitte værdier
Standardværdien bruges selvfølgelig kun, når du ikke eksplicit angiver en værdi. Hvis du gør det, bruges den værdi i stedet.
Her er et andet eksempel. Denne gang giver jeg eksplicit en værdi for den pris kolonne.
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
Eksplicitte NULL'er
Det foregående eksempel gælder også for eksplicit angivet NULL
værdier.
For at demonstrere dette, her er, hvad der sker, hvis jeg udtrykkeligt indsætter NULL
i Pris kolonne.
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
Denne gang Prisen kolonnen er NULL
, fordi det var det, jeg eksplicit indsatte i den kolonne.
For at forhindre dette i at ske, se Sådan konverteres NULL-værdier til kolonnens standardværdi, når du indsætter data i SQLite.
Standardtidsstempel
I dette eksempel opretter jeg en anden tabel. Denne gang satte jeg standardværdien til det aktuelle tidsstempel.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type,
DateInserted DEFAULT CURRENT_TIMESTAMP
);
Og nu til nogle data.
INSERT INTO Types (Type)
VALUES ( 'Hardware' );
SELECT * FROM Types;
Resultat:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57
Tidsstemplet indsættes som forventet.
Automatisk forøgelse af værdi som en standardværdi
Bemærk, at jeg i det foregående eksempel heller ikke angav en værdi for TypeId kolonne, men den genererede alligevel automatisk en standardværdi.
I dette tilfælde skyldtes standardværdien ikke en DEFAULT
begrænsning. Det skyldtes det faktum, at kolonnen er en primær nøglekolonne, der blev oprettet ved hjælp af INTEGER PRIMARY KEY
. Når du definerer en kolonne ved hjælp af INTEGER PRIMARY KEY
, bliver kolonnen automatisk en kolonne med automatisk stigning.
For at demonstrere dette mere grundigt er her, hvad der sker, hvis jeg indsætter nogle flere rækker.
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
For mere information om auto-incrementing-kolonner, se Sådan fungerer AUTOINCREMENT i SQLite, og Sådan opretter du en auto-incrementing-kolonne i SQLite.
Udtryk som en standardværdi
Du kan også bruge et konstant udtryk som standardværdi. For at gøre dette skal udtrykket sættes i parentes.
Her er et eksempel.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
Name,
Entered DEFAULT (round(julianday('now'))),
Deadline DEFAULT (round(julianday('now')) + 10.5)
);
Og nu til nogle data.
INSERT INTO Person (Name)
VALUES ( 'Fred' );
SELECT * FROM Person;
Resultat:
PersonId Name Entered Deadline ---------- ---------- ---------- ---------- 1 Fred 2459006.0 2459016.5
Bemærk, at udtrykket skal være et konstant udtryk. Et konstant udtryk er et udtryk, der kun indeholder konstanter.
Hvis du prøver at bruge et udtryk, der ikke kun indeholder konstanter, får du en fejl.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
FirstName,
LastName,
UserName DEFAULT (FirstName || LastName)
);
Resultat:
Error: default value of column [UserName] is not constant