Beim Erstellen einer Tabelle in SQLite haben Sie die Möglichkeit, jeder Spalte Einschränkungen hinzuzufügen.
Eine solche Beschränkung ist DEFAULT
Einschränkung.
Der DEFAULT
Mit der Einschränkung können Sie einen Wert angeben, der verwendet werden soll, falls für diese Spalte beim Einfügen einer neuen Zeile kein Wert angegeben wird.
Wenn Sie nicht Verwenden Sie einen DEFAULT
-Klausel, dann ist der Standardwert für eine Spalte NULL
.
Mögliche Standardwerte
Der explizite Standardwert eines DEFAULT
Einschränkung kann eine der folgenden sein:
- eine String-Konstante
- eine Blob-Konstante
- eine signierte Zahl
- jeder konstante Ausdruck, der in Klammern eingeschlossen ist.
CURRENT_TIME
CURRENT_DATE
CURRENT_TIMESTAMP
NULL
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price DEFAULT 0.00
);
Hier habe ich einen DEFAULT
hinzugefügt Beschränkung auf den Preis Säule. In diesem Fall ist der Standardwert 0,00 .
Wenn ich jetzt eine neue Zeile einfüge, ohne einen Wert für den Preis anzugeben Spalte wird der Standardwert verwendet.
INSERT INTO Products ( ProductId, ProductName )
VALUES (1, 'Long Weight');
SELECT * FROM Products;
Ergebnis:
ProductId ProductName Price ---------- ----------- ---------- 1 Long Weight 0.0
Explizite Werte
Der Standardwert wird natürlich nur verwendet, wenn Sie nicht explizit einen Wert angeben. Wenn Sie dies tun, wird stattdessen dieser Wert verwendet.
Hier ist ein weiteres Beispiel. Dieses Mal gebe ich ausdrücklich einen Wert für diesen Preis an Säule.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (2, 'Left-Handed Screwdriver', 19.99);
SELECT * FROM Products;
Ergebnis:
ProductId ProductName Price ---------- ------------------------- ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99
Explizite NULLen
Das vorherige Beispiel gilt auch für explizit bereitgestelltes NULL
Werte.
Um dies zu demonstrieren, hier ist, was passiert, wenn ich explizit NULL
einfüge in den Preis Spalte.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (3, 'Elbow Grease', NULL);
SELECT * FROM Products;
Ergebnis:
ProductId ProductName Price ---------- ------------------------ ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99 3 Elbow Grease
Diesmal der Preis Spalte ist NULL
, denn das habe ich ausdrücklich in diese Spalte eingefügt.
Um dies zu verhindern, lesen Sie How to Convert NULL Values to the Column’s Default Value when Inserting Data in SQLite.
Standardzeitstempel
In diesem Beispiel erstelle ich eine weitere Tabelle. Dieses Mal setze ich den Standardwert auf den aktuellen Zeitstempel.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type,
DateInserted DEFAULT CURRENT_TIMESTAMP
);
Und nun zu einigen Daten.
INSERT INTO Types (Type)
VALUES ( 'Hardware' );
SELECT * FROM Types;
Ergebnis:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57
Der Zeitstempel wird wie erwartet eingefügt.
Automatisch inkrementierender Wert als Standardwert
Beachten Sie, dass ich im vorherigen Beispiel auch keinen Wert für TypeId angegeben habe -Spalte, aber es wurde trotzdem automatisch ein Standardwert generiert.
In diesem Fall lag der Standardwert nicht an einem DEFAULT
Zwang. Dies lag daran, dass die Spalte eine Primärschlüsselspalte ist, die mit INTEGER PRIMARY KEY
erstellt wurde . Wenn Sie eine Spalte mit INTEGER PRIMARY KEY
definieren , wird die Spalte automatisch zu einer Auto-Increment-Spalte.
Um dies gründlicher zu demonstrieren, sehen Sie hier, was passiert, wenn ich weitere Zeilen einfüge.
INSERT INTO Types (Type)
VALUES
( 'Software' ),
( 'Hardcopy' );
SELECT * FROM Types;
Ergebnis:
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
Weitere Informationen zum automatischen Inkrementieren von Spalten finden Sie unter Funktionsweise von AUTOINCREMENT in SQLite und Erstellen einer automatisch inkrementierenden Spalte in SQLite.
Ausdrücke als Standardwert
Sie können auch einen konstanten Ausdruck als Standardwert verwenden. Dazu muss der Ausdruck in Klammern eingeschlossen werden.
Hier ist ein Beispiel.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
Name,
Entered DEFAULT (round(julianday('now'))),
Deadline DEFAULT (round(julianday('now')) + 10.5)
);
Und nun zu einigen Daten.
INSERT INTO Person (Name)
VALUES ( 'Fred' );
SELECT * FROM Person;
Ergebnis:
PersonId Name Entered Deadline ---------- ---------- ---------- ---------- 1 Fred 2459006.0 2459016.5
Beachten Sie, dass der Ausdruck ein konstanter Ausdruck sein muss. Ein konstanter Ausdruck ist ein Ausdruck, der nur Konstanten enthält.
Wenn Sie versuchen, einen Ausdruck zu verwenden, der nicht nur Konstanten enthält, erhalten Sie eine Fehlermeldung.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
FirstName,
LastName,
UserName DEFAULT (FirstName || LastName)
);
Ergebnis:
Error: default value of column [UserName] is not constant