SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Definir um valor padrão para uma coluna no SQLite:restrição DEFAULT


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