sql >> Databáze >  >> RDS >> SQLite

Nastavte výchozí hodnotu pro sloupec v SQLite:DEFAULT Constraint

Při vytváření tabulky v SQLite máte možnost přidat omezení do každého sloupce.

Jedním z takových omezení je DEFAULT omezení.

DEFAULT omezení umožňuje zadat hodnotu, která se má použít v případě, že pro daný sloupec není při vložení nového řádku zadána žádná hodnota.

Pokud neděláte použijte DEFAULT klauzule, pak je výchozí hodnota pro sloupec NULL .

Možné výchozí hodnoty

Explicitní výchozí hodnota DEFAULT omezení může být kterékoli z následujících:

  • řetězcová konstanta
  • konstanta blob
  • číslo se znaménkem
  • jakýkoli konstantní výraz uzavřený v závorkách.
  • CURRENT_TIME
  • CURRENT_DATE
  • CURRENT_TIMESTAMP
  • NULL

Příklad

Zde je příklad k demonstraci.

CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName,
    Price DEFAULT 0.00
);

Zde jsem přidal DEFAULT omezení na Cenu sloupec. V tomto případě je výchozí hodnota 0,00 .

Nyní, když vložím nový řádek bez zadání hodnoty pro Cena sloupec, použije se výchozí hodnota.

INSERT INTO Products ( ProductId, ProductName ) 
VALUES (1, 'Long Weight');

SELECT * FROM Products;

Výsledek:

ProductId   ProductName  Price     
----------  -----------  ----------
1           Long Weight  0.0       

Explicitní hodnoty

Výchozí hodnota se samozřejmě použije pouze v případě, že hodnotu explicitně nezadáte. Pokud tak učiníte, použije se místo toho tato hodnota.

Zde je další příklad. Tentokrát výslovně uvádím hodnotu této Ceny sloupec.

INSERT INTO Products ( ProductId, ProductName, Price ) 
VALUES (2, 'Left-Handed Screwdriver', 19.99);

SELECT * FROM Products;

Výsledek:

ProductId   ProductName                Price     
----------  -------------------------  ----------
1           Long Weight                0.0       
2           Left-Handed Screwdriver    19.99     

Explicitní hodnoty NULL

Předchozí příklad platí také pro explicitně poskytnuté NULL hodnoty.

Abychom to demonstrovali, zde je to, co se stane, když výslovně vložím NULL do Ceny sloupec.

INSERT INTO Products ( ProductId, ProductName, Price ) 
VALUES (3, 'Elbow Grease', NULL);

SELECT * FROM Products;

Výsledek:

ProductId   ProductName               Price     
----------  ------------------------  ----------
1           Long Weight               0.0       
2           Left-Handed Screwdriver   19.99     
3           Elbow Grease                        

Tentokrát Cena sloupec je NULL , protože to je to, co jsem výslovně vložil do tohoto sloupce.

Chcete-li tomu zabránit, přečtěte si článek Jak převést hodnoty NULL na výchozí hodnotu sloupce při vkládání dat do SQLite.

Výchozí časové razítko

V tomto příkladu vytvořím další tabulku. Tentokrát jsem nastavil výchozí hodnotu na aktuální časové razítko.

CREATE TABLE Types( 
    TypeId INTEGER PRIMARY KEY, 
    Type,
    DateInserted DEFAULT CURRENT_TIMESTAMP
);

A teď pár údajů.

INSERT INTO Types (Type) 
VALUES ( 'Hardware' );

SELECT * FROM Types;

Výsledek:

TypeId      Type        DateInserted       
----------  ----------  -------------------
1           Hardware    2020-06-05 00:21:57

Časové razítko je vloženo podle očekávání.

Automaticky se zvyšující hodnota jako výchozí hodnota

Všimněte si, že v předchozím příkladu jsem také nezadal hodnotu pro TypeId sloupec, ale stejně automaticky vygeneroval výchozí hodnotu.

V tomto případě výchozí hodnota nebyla způsobena DEFAULT omezení. Bylo to kvůli skutečnosti, že sloupec je sloupec primárního klíče, který byl vytvořen pomocí INTEGER PRIMARY KEY . Když definujete sloupec pomocí INTEGER PRIMARY KEY , sloupec se automaticky stane sloupcem s automatickým přírůstkem.

Abychom to důkladněji demonstrovali, zde je to, co se stane, když vložím další řádky.

INSERT INTO Types (Type) 
VALUES 
  ( 'Software' ),
  ( 'Hardcopy' );

SELECT * FROM Types;

Výsledek:

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

Další informace o sloupcích s automatickým přírůstkem najdete v tématu Jak funguje AUTOINCREMENT v SQLite a Jak vytvořit sloupec s automatickým přírůstkem v SQLite.

Výrazy jako výchozí hodnota

Jako výchozí hodnotu můžete také použít konstantní výraz. K tomu musí být výraz uzavřen v závorkách.

Zde je příklad.

CREATE TABLE Person( 
    PersonId INTEGER PRIMARY KEY, 
    Name,
    Entered DEFAULT (round(julianday('now'))),
    Deadline  DEFAULT (round(julianday('now')) + 10.5)
);

A teď pár údajů.

INSERT INTO Person (Name) 
VALUES ( 'Fred' );

SELECT * FROM Person;

Výsledek:

PersonId    Name        Entered     Deadline  
----------  ----------  ----------  ----------
1           Fred        2459006.0   2459016.5 

Všimněte si, že výraz musí být konstantní výraz. Konstantní výraz je výraz, který obsahuje pouze konstanty.

Pokud se pokusíte použít výraz, který neobsahuje pouze konstanty, dostanete chybu.

CREATE TABLE Person( 
    PersonId INTEGER PRIMARY KEY, 
    FirstName,
    LastName,
    UserName DEFAULT (FirstName || LastName)
);

Výsledek:

Error: default value of column [UserName] is not constant

  1. PostgreSQL:Porovnání řetězců bez ohledu na velikost písmen

  2. Jak používat ALIAS v klauzuli ORDER BY PostgreSQL?

  3. Relační databáze

  4. Jak získat efektivní řešení zablokování SQL Serveru v C# pomocí ADO?