SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Ustaw domyślną wartość dla kolumny w SQLite:DEFAULT Constraint

Podczas tworzenia tabeli w SQLite masz możliwość dodania ograniczeń do każdej kolumny.

Jednym z takich ograniczeń jest DEFAULT ograniczenie.

DEFAULT ograniczenie umożliwia określenie wartości, która zostanie użyta w przypadku, gdy dla tej kolumny nie zostanie podana żadna wartość po wstawieniu nowego wiersza.

Jeśli nie użyj DEFAULT klauzula, wtedy domyślną wartością kolumny jest NULL .

Możliwe wartości domyślne

Jawna wartość domyślna DEFAULT ograniczeniem może być dowolne z poniższych:

  • stała łańcuchowa
  • stała kropla
  • podpisany numer
  • dowolne wyrażenie stałe ujęte w nawiasy.
  • CURRENT_TIME
  • CURRENT_DATE
  • CURRENT_TIMESTAMP
  • NULL

Przykład

Oto przykład do zademonstrowania.

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

Tutaj dodałem DEFAULT ograniczenie Ceny kolumna. W tym przypadku wartość domyślna to 0.00 .

Teraz, gdy wstawiam nowy wiersz bez określania wartości Cena kolumna, używana jest wartość domyślna.

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

SELECT * FROM Products;

Wynik:

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

Wyraźne wartości

Oczywiście wartość domyślna jest używana tylko wtedy, gdy nie podasz jawnie wartości. Jeśli tak, to ta wartość jest używana zamiast tego.

Oto kolejny przykład. Tym razem wyraźnie podaję wartość tej Ceny kolumna.

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

SELECT * FROM Products;

Wynik:

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

Wyraźne wartości NULL

Poprzedni przykład dotyczy również jawnie podanego NULL wartości.

Aby to zademonstrować, oto co się stanie, jeśli jawnie wstawię NULL do Ceny kolumna.

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

SELECT * FROM Products;

Wynik:

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

Tym razem Cena kolumna ma wartość NULL , ponieważ to właśnie wstawiłem do tej kolumny.

Aby temu zapobiec, zobacz Jak przekonwertować wartości NULL na domyślną wartość kolumny podczas wstawiania danych do SQLite.

Domyślna sygnatura czasowa

W tym przykładzie tworzę kolejną tabelę. Tym razem ustawiłem domyślną wartość na bieżący znacznik czasu.

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

A teraz trochę danych.

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

SELECT * FROM Types;

Wynik:

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

Znacznik czasu został wstawiony zgodnie z oczekiwaniami.

Automatyczne zwiększanie wartości jako wartość domyślna

Zauważ, że w poprzednim przykładzie nie podałem również wartości dla TypeId kolumna, ale i tak automatycznie wygenerowała wartość domyślną.

W tym przypadku wartość domyślna nie wynikała z DEFAULT ograniczenie. Wynikało to z faktu, że kolumna jest kolumną klucza podstawowego, która została utworzona za pomocą INTEGER PRIMARY KEY . Kiedy definiujesz kolumnę za pomocą INTEGER PRIMARY KEY , kolumna automatycznie staje się kolumną z automatycznym przyrostem.

Aby dokładniej to zademonstrować, oto co się stanie, jeśli wstawię więcej wierszy.

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

SELECT * FROM Types;

Wynik:

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

Aby uzyskać więcej informacji na temat autoinkrementacji kolumn, zobacz Jak działa AUTOINCREMENT w SQLite i Jak utworzyć auto-inkrementującą kolumnę w SQLite.

Wyrażenia jako wartość domyślna

Możesz również użyć wyrażenia stałego jako wartości domyślnej. Aby to zrobić, wyrażenie musi być ujęte w nawiasy.

Oto przykład.

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

A teraz trochę danych.

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

SELECT * FROM Person;

Wynik:

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

Zauważ, że wyrażenie musi być wyrażeniem stałym. Wyrażenie stałe to wyrażenie zawierające tylko stałe.

Jeśli spróbujesz użyć wyrażenia, które nie zawiera tylko stałych, otrzymasz błąd.

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przypisywanie tabel za pomocą bazy danych Room w Android Studio

  2. Jak sprawdzić bazę danych na nierootowanym urządzeniu z Androidem?

  3. Jak dodać określoną liczbę pustych wierszy w sqlite?

  4. Jak automatycznie ponownie wysłać zapytanie za pomocą LoaderManager

  5. Robolectric uzyskujący dostęp do bazy danych zgłasza błąd