SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Legen Sie einen Standardwert für eine Spalte in SQLite fest:DEFAULT Constraint

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