SQLite
 sql >> база данни >  >> RDS >> SQLite

Задайте стойност по подразбиране за колона в SQLite:Ограничение по подразбиране

Когато създавате таблица в SQLite, имате възможност да добавите ограничения към всяка колона.

Едно такова ограничение е DEFAULT ограничение.

DEFAULT ограничението ви позволява да зададете стойност, която да се използва в случай, че не е предоставена стойност за тази колона, когато се вмъкне нов ред.

Ако не използвайте DEFAULT клауза, тогава стойността по подразбиране за колона е NULL .

Възможни стойности по подразбиране

Изричната стойност по подразбиране на DEFAULT ограничението може да бъде някое от следните:

  • низова константа
  • блоб константа
  • подписан номер
  • всеки константен израз, затворен в скоби.
  • CURRENT_TIME
  • CURRENT_DATE
  • CURRENT_TIMESTAMP
  • NULL

Пример

Ето пример за демонстрация.

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

Тук добавих DEFAULT ограничение на Цената колона. В този случай стойността по подразбиране е 0,00 .

Сега, когато вмъквам нов ред, без да посоча стойност за Цена колона се използва стойността по подразбиране.

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

SELECT * FROM Products;

Резултат:

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

Изрични стойности

Разбира се, стойността по подразбиране се използва само когато не предоставите изрично стойност. Ако го направите, вместо това се използва тази стойност.

Ето още един пример. Този път изрично предоставям стойност за тази Цена колона.

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

SELECT * FROM Products;

Резултат:

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

Изрични NULL числа

Предишният пример се отнася и за изрично предоставения NULL стойности.

За да демонстрирам това, ето какво се случва, ако изрично вмъкна NULL в Цена колона.

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

SELECT * FROM Products;

Резултат:

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

Този път Цена колоната е NULL , защото това е, което изрично вмъкнах в тази колона.

За да предотвратите това, вижте Как да конвертирате NULL стойности в стойността по подразбиране на колоната при вмъкване на данни в SQLite.

Частопис по подразбиране

В този пример създавам друга таблица. Този път зададох стойността по подразбиране на текущата времева марка.

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

А сега за малко данни.

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

SELECT * FROM Types;

Резултат:

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

Печатът за време е вмъкнат както се очаква.

Автоматично нарастваща стойност като стойност по подразбиране

Забележете, че в предишния пример също не предоставих стойност за TypeId колона, но така или иначе автоматично генерира стойност по подразбиране.

В този случай стойността по подразбиране не се дължи на DEFAULT ограничение. Това се дължи на факта, че колоната е колона с първичен ключ, създадена с помощта на INTEGER PRIMARY KEY . Когато дефинирате колона с помощта на INTEGER PRIMARY KEY , колоната автоматично става колона с автоматично увеличение.

За да демонстрирам това по-подробно, ето какво се случва, ако вмъкна още няколко реда.

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

SELECT * FROM Types;

Резултат:

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

За повече информация относно автоматично увеличаващите се колони вижте Как работи AUTOINCREMENT в SQLite и Как да създадете колона с автоматично увеличение в SQLite.

Изрази като стойност по подразбиране

Можете също да използвате константен израз като стойност по подразбиране. За да направите това, изразът трябва да бъде затворен в скоби.

Ето един пример.

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

А сега за малко данни.

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

SELECT * FROM Person;

Резултат:

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

Имайте предвид, че изразът трябва да бъде постоянен израз. Константен израз е израз, който съдържа само константи.

Ако се опитате да използвате израз, който не съдържа само константи, ще получите грешка.

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

Резултат:

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. Entity Developer и ADO.Net доставчици на данни вече поддържат Entity Framework Core 5

  2. SQLite - Има ли разлика между ограничение на таблица UNIQUE и ограничение на колона UNIQUE?

  3. Препоръчителен начин / поръчка за четене на данни от уеб услуга, анализирайте тези данни и ги вмъкнете в SQLite db

  4. SQLite ляво присъединяване

  5. Създаване на първо офлайн приложение с Node.js и SQLite