Когато създавате таблица в 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