Clave primaria y clave externa en SQLite con ejemplos
SQLite Limitaciones
Las restricciones de columna imponen restricciones y reglas a los valores insertados en una columna para validar los datos insertados. Las restricciones de las columnas se definen al crear una tabla, en la definiciรณn de la columna.
SQLite Clave primaria
Todos los valores de una columna de clave principal deben ser รบnicos y no nulos.
La clave principal se puede aplicar a una sola columna o a una combinaciรณn de columnas; en el รบltimo caso, la combinaciรณn de los valores de las columnas debe ser รบnica para todas las filas de las tablas.
Sintaxis:
Hay muchas formas diferentes de definir una clave principal en una tabla como:
- En la propia definiciรณn de la columna:
ColumnName INTEGER NOT NULL PRIMARY KEY;
- Como definiciรณn separada:
PRIMARY KEY(ColumnName);
- Para crear una combinaciรณn de columnas como clave principal:
PRIMARY KEY(ColumnName1, ColumnName2);
Restricciรณn no nula
SQLite La restricciรณn no nula impide que una columna tenga un valor nulo:
ColumnName INTEGER NOT NULL;
Restricciรณn POR DEFECTO
SQLite Restricciรณn predeterminada: si no inserta ningรบn valor en una columna, se insertarรก el valor predeterminado.
Por Ejemplo:
ColumnName INTEGER DEFAULT 0;
Si escribe una instrucciรณn de inserciรณn y no especificรณ ningรบn valor para esa columna, la columna tendrรก el valor 0.
SQLite Restricciรณn รNICA
SQLite Restricciรณn รบnica evitarรก valores duplicados entre todos los valores de la columna.
Por ejemplo:
EmployeeId INTEGER NOT NULL UNIQUE;
Esto harรก cumplir la "ID de empleado" valor sea รบnico, no se permitirรกn valores duplicados. Tenga en cuenta que esto se aplica a los valores de la columna. "ID de empleado" solamente.
SQLite VERIFICAR restricciรณn
SQLite check constraint una condiciรณn para verificar un valor insertado, si el valor no coincide con la condiciรณn, no se insertarรก.
Quantity INTEGER NOT NULL CHECK(Quantity > 10);
No puede insertar un valor inferior a 10 en el "Cantidad" columna.
SQLite Clave externa
La funciรณn SQLite La clave externa es una restricciรณn que verifica la existencia de un valor presente en una tabla para otra tabla que tiene una relaciรณn con la primera tabla donde se define la clave externa.
Al trabajar con varias tablas, cuando hay dos tablas que se relacionan entre sรญ con una columna en comรบn. Y si desea asegurarse de que el valor insertado en uno de ellos debe existir en la columna de la otra tabla, entonces debe usar una "Restricciรณn de clave externa" en la columna en comรบn.
En este caso, cuando intenta insertar un valor en esa columna, la clave externa garantizarรก que el valor insertado exista en la columna de la tabla.
Tenga en cuenta que las restricciones de claves externas no estรกn habilitadas de forma predeterminada en SQLite, primero debes habilitarlos ejecutando el siguiente comando:
PRAGMA foreign_keys = ON;
Se introdujeron restricciones de clave externa en SQLite a partir de la versiรณn 3.6.19.
Ejemplo de SQLite Clave externa
Supongamos que tenemos dos tablas; Estudiantes y Departamentos.
La tabla Estudiantes tiene una lista de estudiantes y la tabla departamentos tiene una lista de departamentos. Cada estudiante pertenece a un departamento; es decir, cada estudiante tiene una columna de ID de departamento.
Ahora, veremos cรณmo puede ser รบtil la restricciรณn de clave externa para garantizar que el valor de la identificaciรณn del departamento en la tabla de estudiantes deba existir en la tabla de departamentos.
Entonces, si creamos una restricciรณn de clave externa en el Id. de departamento en la tabla Estudiantes, cada Id. de departamento insertado debe estar presente en la tabla Departamentos.
CREATE TABLE [Departments] ( [DepartmentId] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [DepartmentName] NVARCHAR(50) NULL ); CREATE TABLE [Students] ( [StudentId] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [StudentName] NVARCHAR(50) NULL, [DepartmentId] INTEGER NOT NULL, [DateOfBirth] DATE NULL, FOREIGN KEY(DepartmentId) REFERENCES Departments(DepartmentId) );
Para comprobar cรณmo las restricciones de clave externa pueden impedir que se inserte un elemento o valor no definido en una tabla que tiene una relaciรณn con otra tabla, analizaremos el siguiente ejemplo.
En este ejemplo, la tabla Departamentos tiene una restricciรณn de clave externa para la tabla Estudiantes, por lo que cualquier valor de ID de departamento insertado en la tabla de estudiantes debe existir en la tabla de departamentos. Si intenta insertar un valor de ID de departamento que no existe en la tabla de departamentos, la restricciรณn de clave externa le impedirรก hacerlo.
Insertemos dos departamentos. "ESO" y "Letras" En la tabla de departamentos de la siguiente manera:
INSERT INTO Departments VALUES(1, 'IT'); INSERT INTO Departments VALUES(2, 'Arts');
Las dos declaraciones deben insertar dos departamentos en la tabla de departamentos; puede asegurarse de que los dos valores se insertaron ejecutando la consulta โSELECCIONAR * DE Departamentosโ despuรฉs:
Luego intente insertar un nuevo estudiante con un ID de departamento que no existe en la tabla de departamentos:
INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);
La fila no se insertarรก y recibirรก un error que indicarรก lo siguiente: Error en la restricciรณn de CLAVE EXTRANJERA.


