Bij het maken van een tabel in SQLite heb je de mogelijkheid om beperkingen toe te voegen aan elke kolom.
Een dergelijke beperking is de DEFAULT
beperking.
De DEFAULT
constraint stelt u in staat een waarde op te geven die moet worden gebruikt in het geval dat er geen waarde wordt opgegeven voor die kolom wanneer een nieuwe rij wordt ingevoegd.
Als u niet gebruik een DEFAULT
clausule, dan is de standaardwaarde voor een kolom NULL
.
Mogelijke standaardwaarden
De expliciete standaardwaarde van een DEFAULT
beperking kan een van de volgende zijn:
- een tekenreeksconstante
- een blob-constante
- een ondertekend nummer
- elke constante expressie tussen haakjes.
CURRENT_TIME
CURRENT_DATE
CURRENT_TIMESTAMP
NULL
Voorbeeld
Hier is een voorbeeld om te demonstreren.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price DEFAULT 0.00
);
Hier heb ik een DEFAULT
. toegevoegd beperking tot de Prijs kolom. In dit geval is de standaardwaarde 0,00 .
Als ik nu een nieuwe rij invoeg zonder een waarde op te geven voor de Prijs kolom, wordt de standaardwaarde gebruikt.
INSERT INTO Products ( ProductId, ProductName )
VALUES (1, 'Long Weight');
SELECT * FROM Products;
Resultaat:
ProductId ProductName Price ---------- ----------- ---------- 1 Long Weight 0.0
Expliciete waarden
Natuurlijk wordt de standaardwaarde alleen gebruikt als u niet expliciet een waarde opgeeft. Als u dat doet, wordt in plaats daarvan die waarde gebruikt.
Hier is nog een voorbeeld. Deze keer geef ik expliciet een waarde op voor die Prijs kolom.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (2, 'Left-Handed Screwdriver', 19.99);
SELECT * FROM Products;
Resultaat:
ProductId ProductName Price ---------- ------------------------- ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99
Expliciete NULL's
Het vorige voorbeeld is ook van toepassing op expliciet opgegeven NULL
waarden.
Om dit te demonstreren, is dit wat er gebeurt als ik expliciet NULL
invoeg in de Prijs kolom.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (3, 'Elbow Grease', NULL);
SELECT * FROM Products;
Resultaat:
ProductId ProductName Price ---------- ------------------------ ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99 3 Elbow Grease
Deze keer de Prijs kolom is NULL
, want dat is wat ik expliciet in die kolom heb ingevoegd.
Zie Hoe u NULL-waarden converteert naar de standaardwaarde van de kolom bij het invoegen van gegevens in SQLite om dit te voorkomen.
Standaard tijdstempel
In dit voorbeeld maak ik een andere tabel aan. Deze keer heb ik de standaardwaarde ingesteld op de huidige tijdstempel.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type,
DateInserted DEFAULT CURRENT_TIMESTAMP
);
En nu wat gegevens.
INSERT INTO Types (Type)
VALUES ( 'Hardware' );
SELECT * FROM Types;
Resultaat:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57
De tijdstempel wordt ingevoegd zoals verwacht.
Waarde automatisch verhogen als standaardwaarde
Merk op dat ik in het vorige voorbeeld ook geen waarde heb opgegeven voor de TypeId kolom, maar het genereerde toch automatisch een standaardwaarde.
In dit geval was de standaardwaarde niet te wijten aan een DEFAULT
beperking. Dit kwam doordat de kolom een primaire sleutelkolom is die is gemaakt met INTEGER PRIMARY KEY
. Wanneer u een kolom definieert met behulp van INTEGER PRIMARY KEY
, wordt de kolom automatisch een kolom voor automatisch ophogen.
Om dit grondiger te demonstreren, is dit wat er gebeurt als ik wat meer rijen invoeg.
INSERT INTO Types (Type)
VALUES
( 'Software' ),
( 'Hardcopy' );
SELECT * FROM Types;
Resultaat:
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
Voor meer informatie over automatisch oplopende kolommen, zie Hoe AUTOINCREMENT werkt in SQLite en Hoe u een automatisch oplopende kolom maakt in SQLite.
Uitdrukkingen als standaardwaarde
U kunt ook een constante uitdrukking als standaardwaarde gebruiken. Om dit te doen, moet de uitdrukking tussen haakjes staan.
Hier is een voorbeeld.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
Name,
Entered DEFAULT (round(julianday('now'))),
Deadline DEFAULT (round(julianday('now')) + 10.5)
);
En nu wat gegevens.
INSERT INTO Person (Name)
VALUES ( 'Fred' );
SELECT * FROM Person;
Resultaat:
PersonId Name Entered Deadline ---------- ---------- ---------- ---------- 1 Fred 2459006.0 2459016.5
Merk op dat de uitdrukking een constante uitdrukking moet zijn. Een constante uitdrukking is een uitdrukking die alleen constanten bevat.
Als je een uitdrukking probeert te gebruiken die niet alleen constanten bevat, krijg je een foutmelding.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
FirstName,
LastName,
UserName DEFAULT (FirstName || LastName)
);
Resultaat:
Error: default value of column [UserName] is not constant