Ao criar uma tabela no SQLite, você tem a opção de adicionar restrições a cada coluna.
Uma dessas restrições é o
DEFAULT
limitação. O
DEFAULT
A restrição permite que você especifique um valor a ser usado caso nenhum valor seja fornecido para essa coluna quando uma nova linha for inserida. Se você não use um
DEFAULT
cláusula, então o valor padrão para uma coluna é NULL
. Possíveis valores padrão
O valor padrão explícito de um
DEFAULT
restrição pode ser qualquer um dos seguintes:- uma constante de string
- uma constante de blob
- um número assinado
- qualquer expressão constante entre parênteses.
CURRENT_TIME
CURRENT_DATE
CURRENT_TIMESTAMP
NULL
Exemplo
Aqui está um exemplo para demonstrar.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price DEFAULT 0.00
);
Aqui eu adicionei um
DEFAULT
restrição ao Preço coluna. Nesse caso, o valor padrão é 0,00 . Agora, quando insiro uma nova linha sem especificar um valor para o Preço coluna, o valor padrão é usado.
INSERT INTO Products ( ProductId, ProductName )
VALUES (1, 'Long Weight');
SELECT * FROM Products;
Resultado:
ProductId ProductName Price ---------- ----------- ---------- 1 Long Weight 0.0
Valores explícitos
Obviamente, o valor padrão é usado apenas quando você não fornece um valor explicitamente. Se você fizer isso, esse valor será usado em seu lugar.
Aqui está outro exemplo. Desta vez, forneço explicitamente um valor para esse Preço coluna.
INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (2, 'Left-Handed Screwdriver', 19.99);
SELECT * FROM Products;
Resultado:
ProductId ProductName Price ---------- ------------------------- ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99
NULOS explícitos
O exemplo anterior também se aplica a
NULL
fornecido explicitamente valores. Para demonstrar isso, veja o que acontece se eu inserir explicitamente
NULL
no Preço coluna. INSERT INTO Products ( ProductId, ProductName, Price )
VALUES (3, 'Elbow Grease', NULL);
SELECT * FROM Products;
Resultado:
ProductId ProductName Price ---------- ------------------------ ---------- 1 Long Weight 0.0 2 Left-Handed Screwdriver 19.99 3 Elbow Grease
Desta vez, o Preço coluna é
NULL
, porque foi isso que inseri explicitamente nessa coluna. Para evitar que isso aconteça, consulte Como converter valores NULL para o valor padrão da coluna ao inserir dados no SQLite.
Carimbo de data e hora padrão
Neste exemplo eu crio outra tabela. Desta vez, defino o valor padrão para o timestamp atual.
CREATE TABLE Types(
TypeId INTEGER PRIMARY KEY,
Type,
DateInserted DEFAULT CURRENT_TIMESTAMP
);
E agora para alguns dados.
INSERT INTO Types (Type)
VALUES ( 'Hardware' );
SELECT * FROM Types;
Resultado:
TypeId Type DateInserted ---------- ---------- ------------------- 1 Hardware 2020-06-05 00:21:57
O carimbo de data/hora é inserido conforme o esperado.
Valor de incremento automático como valor padrão
Observe que no exemplo anterior também não forneci um valor para o TypeId coluna, mas gerou automaticamente um valor padrão de qualquer maneira.
Nesse caso, o valor padrão não foi devido a um
DEFAULT
limitação. Foi devido ao fato de que a coluna é uma coluna de chave primária que foi criada usando INTEGER PRIMARY KEY
. Quando você define uma coluna usando INTEGER PRIMARY KEY
, a coluna se torna automaticamente uma coluna de incremento automático. Para demonstrar isso mais detalhadamente, veja o que acontece se eu inserir mais algumas linhas.
INSERT INTO Types (Type)
VALUES
( 'Software' ),
( 'Hardcopy' );
SELECT * FROM Types;
Resultado:
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
Para obter mais informações sobre colunas de incremento automático, consulte Como o AUTOINCREMENT funciona no SQLite e Como criar uma coluna de incremento automático no SQLite.
Expressões como valor padrão
Você também pode usar uma expressão constante como o valor padrão. Para fazer isso, a expressão deve ser colocada entre parênteses.
Aqui está um exemplo.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
Name,
Entered DEFAULT (round(julianday('now'))),
Deadline DEFAULT (round(julianday('now')) + 10.5)
);
E agora para alguns dados.
INSERT INTO Person (Name)
VALUES ( 'Fred' );
SELECT * FROM Person;
Resultado:
PersonId Name Entered Deadline ---------- ---------- ---------- ---------- 1 Fred 2459006.0 2459016.5
Observe que a expressão deve ser uma expressão constante. Uma expressão constante é uma expressão que contém apenas constantes.
Se você tentar usar uma expressão que não contenha apenas constantes, receberá um erro.
CREATE TABLE Person(
PersonId INTEGER PRIMARY KEY,
FirstName,
LastName,
UserName DEFAULT (FirstName || LastName)
);
Resultado:
Error: default value of column [UserName] is not constant