sql >> Base de Datos >  >> RDS >> SQLite

Establecer un valor predeterminado para una columna en SQLite:Restricción DEFAULT

Al crear una tabla en SQLite, tiene la opción de agregar restricciones a cada columna.

Una de esas restricciones es DEFAULT restricción.

El DEFAULT La restricción le permite especificar un valor que se usará en caso de que no se proporcione ningún valor para esa columna cuando se inserte una nueva fila.

Si no use un DEFAULT cláusula, entonces el valor predeterminado para una columna es NULL .

Posibles valores predeterminados

El valor predeterminado explícito de un DEFAULT la restricción puede ser cualquiera de las siguientes:

  • una constante de cadena
  • una constante de blob
  • un número firmado
  • cualquier expresión constante entre paréntesis.
  • CURRENT_TIME
  • CURRENT_DATE
  • CURRENT_TIMESTAMP
  • NULL

Ejemplo

Aquí hay un ejemplo para demostrarlo.

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

Aquí agregué un DEFAULT restricción al Precio columna. En este caso, el valor predeterminado es 0,00 .

Ahora, cuando inserto una nueva fila sin especificar un valor para el Precio columna, se utiliza el valor predeterminado.

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

SELECT * FROM Products;

Resultado:

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

Valores explícitos

Por supuesto, el valor predeterminado solo se usa cuando no proporciona explícitamente un valor. Si lo hace, se utilizará ese valor en su lugar.

Aquí hay otro ejemplo. Esta vez proporciono explícitamente un valor para ese Precio columna.

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     

NULL explícitos

El ejemplo anterior también se aplica a NULL proporcionado explícitamente valores.

Para demostrar esto, esto es lo que sucede si inserto explícitamente NULL en el Precio columna.

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                        

Esta vez el Precio la columna es NULL , porque eso es lo que inserté explícitamente en esa columna.

Para evitar que esto suceda, consulte Cómo convertir valores NULL al valor predeterminado de la columna al insertar datos en SQLite.

Marca de tiempo predeterminada

En este ejemplo creo otra tabla. Esta vez configuré el valor predeterminado en la marca de tiempo actual.

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

Y ahora algunos datos.

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

SELECT * FROM Types;

Resultado:

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

La marca de tiempo se inserta como se esperaba.

Valor de incremento automático como valor predeterminado

Tenga en cuenta que en el ejemplo anterior tampoco proporcioné un valor para TypeId columna, pero generó automáticamente un valor predeterminado de todos modos.

En este caso, el valor predeterminado no se debió a un DEFAULT restricción. Se debió al hecho de que la columna es una columna de clave principal que se creó usando INTEGER PRIMARY KEY . Cuando define una columna usando INTEGER PRIMARY KEY , la columna se convierte automáticamente en una columna de incremento automático.

Para demostrar esto más a fondo, esto es lo que sucede si inserto algunas filas más.

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 obtener más información sobre columnas de incremento automático, consulte Cómo funciona AUTOINCREMENT en SQLite y Cómo crear una columna de incremento automático en SQLite.

Expresiones como valor predeterminado

También puede utilizar una expresión constante como valor predeterminado. Para ello, la expresión debe estar entre paréntesis.

He aquí un ejemplo.

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

Y ahora algunos datos.

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

SELECT * FROM Person;

Resultado:

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

Tenga en cuenta que la expresión debe ser una expresión constante. Una expresión constante es una expresión que contiene solo constantes.

Si intenta usar una expresión que no contiene solo constantes, obtendrá un error.

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

Resultado:

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