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