Las cláusulas de modificación de datos en SQLite son declaraciones INSERT, UPDATE y DELETE. Se utiliza para insertar nuevas filas, actualizar valores existentes o eliminar filas de la base de datos.
En este tutorial, aprenderá:
- INSERTAR
- Actualizar
- Borrar
- Cláusula de conflicto
Tenga en cuenta que, para todos los siguientes ejemplos, debe ejecutar sqlite3.exe y abrir una conexión a la base de datos de muestra mientras fluye:
Paso 1) En este paso,
- Abra Mi PC y navegue hasta el siguiente directorio " C: \ sqlite " y
- Luego abra " sqlite3.exe ":
Paso 2) Abra la base de datos " TutorialsSampleDB.db " con el siguiente comando:
.open TutorialsSampleDB.db
Ahora está listo para ejecutar cualquier tipo de consulta en la base de datos.
INSERTAR SQLite
SQLite INSERT se utiliza para insertar registros en una tabla específica de la base de datos. tienes que usar la cláusula 'INSERT'. La sintaxis de la cláusula INSERT es la siguiente:
- Después de la cláusula INSERT, debe indicar en qué tabla necesita insertar los valores.
- Después del nombre de la tabla, escribe la lista de columnas en la que desea insertar los valores.
- Puede ignorar el nombre de las columnas y no escribir en ellas.
- Si no escribe el nombre de las columnas, los valores se insertarán en todas las columnas que se encuentran en la tabla con el mismo orden, las columnas se definen en la tabla.
- Después de la cláusula VALUES, debe enumerar los valores que se insertarán.
- Cada cláusula INSERT inserta solo una fila. Si desea insertar varias filas, debe escribir varias cláusulas INSERT, una para cada fila.
Ejemplo de inserción de SQLite
En el siguiente ejemplo, insertaremos 2 filas en la tabla de estudiantes, una para cada estudiante:
INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VALORES (11, 'Ahmad', 4, '1997-10-12');INSERT INTO Students VALUES (12, 'Aly', 4, '1996-10-12');
Esto debería ejecutarse correctamente y no hay salida para esto:
Esto insertará dos estudiantes:
- El primer estudiante con StudentId = 11, StudentName = Ahmad, DepartmentId = 4 y DateOfBirth = 1997-10-12.
- El segundo estudiante con StudentId = 12, StudentName = Aly, DepartmentId = 4 y DateOfBirth = 1996-10-12 '.
En la primera declaración, enumeramos los nombres de columnas " StudentId, StudentName, DepartmentId, DateOfBirth ". Sin embargo, en la segunda declaración, no lo hicimos.
Los cuatro valores " 12, 'Aly', 4, '1996-10-12' " se insertarán en las cuatro columnas de la tabla de Estudiantes en el mismo orden en que están definidas.
Ahora, verifiquemos que los dos estudiantes se insertaron en la tabla Estudiantes ejecutando la siguiente consulta:
SELECCIONAR * DE Estudiantes;
Luego, debería ver los dos estudiantes que regresaron de esa consulta de la siguiente manera:
Actualización de SQLite
SQLite UPDATE Query se utiliza para modificar los registros existentes en una tabla. Puede usar la cláusula WHERE con la consulta UPDATE para actualizar las filas seleccionadas. La cláusula UPDATE actualiza una tabla cambiando un valor para una columna específica. La siguiente es la sintaxis de la cláusula UPDATE:
Como sigue:
- Después de la "cláusula de actualización", debe escribir el nombre de la tabla para actualizar.
- Tienes que escribir "cláusula SET" que se utiliza para escribir el nombre de la columna a actualizar y el valor a actualizar.
- Puede actualizar más de una columna. Puede utilizar una coma entre cada línea.
- Puede especificar una cláusula WHERE para especificar solo algunas filas. Solo se actualizan las filas que la expresión evalúa como verdaderas. Si no especificó una cláusula WHERE, se actualizarán todas las filas.
Ejemplo de actualización de SQLite
En la siguiente declaración UPDATE, actualizaremos el DepartmentId del Student con StudentId = 6 para que sea 3:
ACTUALIZAR EstudiantesSET DepartmentId = 3DONDE StudentId = 6;
Esto debería ejecutarse correctamente y no debería obtener ningún resultado:
En la cláusula UPDATE, especificamos que queremos actualizar la tabla Estudiantes.
- En la cláusula WHERE, filtramos a todos los estudiantes para seleccionar solo la fila para StudentId = 6.
- La cláusula SET actualizará el valor del ID de departamento para los estudiantes seleccionados a 3.
Ahora, verifiquemos que el alumno con ID 6 esté actualizado, ejecutando el siguiente comando:
SELECCIONE * DE Estudiantes DONDE StudentId = 6;
Ahora debería ver que el valor de ID de departamento ahora es 3 de la siguiente manera:
Eliminar SQLite
La consulta SQLite DELETE se utiliza para eliminar registros existentes de una tabla especificada. Puede usar la cláusula WHERE con consultas DELETE para eliminar las filas seleccionadas.
La cláusula DELETE tiene la siguiente sintaxis:
- Debe escribir un nombre de tabla después de la cláusula DELETE FROM, de la que desea eliminar registros. ( Nota: la cláusula DELETE se usa para eliminar algunos registros de una tabla o eliminar todos los registros y no eliminará la tabla en sí. Sin embargo, la cláusula DROP se usa para eliminar toda la tabla con todos los registros en ella. )
- Si escribe la cláusula DELETE como esta "DELETE FROM guru", esto eliminará todos los registros de la tabla "guru".
- Puede especificar una condición DONDE con una expresión si desea eliminar algunas filas específicas. Solo se eliminarán las filas para las que la expresión se evalúa como verdadera. Por ejemplo, "DELETE FROM guru WHERE id> 5": esto eliminará solo los registros que tengan un id mayor que 5.
Ejemplo
En la siguiente declaración, eliminaremos dos estudiantes con StudentId 11 y 12:
BORRAR DE Estudiantes DONDE StudentId = 11 O StudentId = 12;
La expresión " StudentId = 11 OR StudentId = 12 " será verdadera solo para estudiantes con ID 11 y 12. Por lo tanto, la cláusula DELETE se aplicará a ambos y solo los eliminará.
Este comando debería ejecutarse correctamente y no debería obtener ningún resultado como el siguiente:
Puede verificar que los dos estudiantes fueron eliminados, seleccionando todos los registros de la tabla Estudiantes de la siguiente manera:
SELECCIONAR * DE Estudiantes;
No debería ver a los dos estudiantes con los identificadores 11 y 12 de la siguiente manera:
Cláusula de conflicto de SQLite
Suponga que tiene una columna que tiene una de las siguientes restricciones de columna: UNIQUE, NOT NULL, CHECK o PRIMARY KEY. Y luego intentó insertar o actualizar un valor en esa columna con un valor que entra en conflicto con esta restricción.
Por ejemplo, si una columna tiene una restricción ÚNICA e intentó insertar un valor que ya existe (un valor duplicado), que entra en conflicto con la restricción ÚNICA. Luego, la cláusula CONFLICT le permite elegir qué hacer en tales casos para resolver este conflicto.
Antes continuamos explicando cómo la cláusula CONFLICT resuelve el conflicto. Debe comprender qué es una transacción de base de datos.
Transacción de base de datos:
El término transacción de base de datos es una lista de operaciones SQLite (insertar, actualizar o eliminar). La transacción de la base de datos debe ejecutarse como una unidad, ya sea que todas las operaciones se ejecuten con éxito o ninguna. Todas las operaciones se cancelarán si una de ellas no se ejecutó.
Ejemplo de una transacción de base de datos:
La transacción para transferir dinero de una cuenta bancaria a otra implicará un par de actividades. Esta operación de transacción incluye el retiro de dinero de la primera cuenta y su depósito en otra cuenta. Esta transacción debe completarse o cancelarse por completo y no fallar a la mitad.
Aquí está la lista de cinco resoluciones que puede elegir en la cláusula de CONFLICTO:
- ROLLBACK : esto revertirá la transacción en la que la declaración SQLite actual que tiene el conflicto (cancelará toda la transacción). Por ejemplo, si está intentando actualizar 10 filas y la quinta fila tiene un valor que entra en conflicto con una restricción, no se actualizará ninguna fila y las 10 filas permanecerán iguales. Se lanzará un error.
- ABORTAR : esto abortará (cancelará) la declaración SQLite actual solo que tenga el conflicto y la transacción no se cancelará. Por ejemplo, si está intentando actualizar 10 filas y la quinta fila tiene un valor que entra en conflicto con una restricción, solo el quinto valor no se actualizará, pero las otras 9 filas se actualizarán. Se lanzará un error.
- FAIL: anula la declaración SQLite actual que tiene el conflicto. Sin embargo, la transacción no continuará, pero se confirmarán los cambios anteriores realizados en las filas antes de la fila que tiene el conflicto. Por ejemplo, si está intentando actualizar 10 filas y la quinta fila tiene un valor que entra en conflicto con una restricción, solo se actualizarán las 4 filas y la otra no. Se lanzará un error.
- IGNORAR : esto omitirá la fila que contiene la violación de la restricción y continuará procesando las otras filas siguientes de la declaración SQLite. Por ejemplo, si está intentando actualizar 10 filas y la quinta fila tiene un valor que entra en conflicto con una restricción, solo se actualizarán las 4 filas y la otra no. No continuará para actualizar otras filas y detenerse en la fila que tiene el valor de conflicto. No se lanzará ningún error.
- REEMPLAZAR : depende del tipo de restricción que tenga la infracción:
- Cuando hay una violación de restricción para la restricción UNIQUE o PRIMARY KEY. REPLACE reemplazará la fila que causa la infracción con la nueva fila insertada o actualizada.
- Cuando hay una violación de la restricción NOT NULL, la cláusula REPLACE reemplazará el valor NULL con el valor predeterminado de esa columna. Si la columna no tiene un valor predeterminado, SQLite abortará la declaración (la declaración se cancelará)
- SI se produce la violación de la restricción CHECK, la cláusula se cancelará.
Nota: Las 5 resoluciones anteriores son opciones sobre cómo desea resolver el conflicto. Puede que no sea necesariamente lo que sea aplicable para resolver un conflicto, sea aplicable para resolver otros tipos de conflictos.
Cómo declarar la cláusula de CONFLICTO
Puede declarar la cláusula ON CONFLICT cuando define una restricción para una definición de columna dentro de la cláusula CREATE TABLE. Usando la siguiente sintaxis:
Puede elegir una de las cinco resoluciones para resolver el conflicto como se explicó anteriormente.
SOBRE EL Ejemplo de IGNORACIÓN DE CONFLICTO
Paso 1) Cree un nuevo asunto de tabla de la siguiente manera:
CREAR TABLA [Sujetos] ([SubjectId] INTEGER NOT NULL CLAVE PRINCIPAL EN CONFLICT IGNORE,[SubjectName] NVARCHAR NO NULL);
Observe que hemos definido una restricción PRIMARY KEY en la columna SubjectId. La restricción de clave principal no permitirá que se inserten dos valores duplicados en la columna SubjectId para que todos los valores de esa columna sean únicos. Además, observe que elegimos una resolución de conflicto para que sea " IGNORAR ".
El comando debería ejecutarse correctamente y no debería recibir ningún error:
Paso 2) Ahora, insertemos algunos valores en los nuevos asuntos de la tabla, pero con un valor que viole la restricción de clave principal:
INSERTAR EN LAS Materias VALORES (1, 'Álgebra');INSERTAR EN LAS asignaturas VALORES (2, 'Curso de base de datos');INSERT INTO Sujetos VALORES (2, 'Estructuras de datos');INSERT INTO Sujetos VALORES (4, 'Algoritmos');
En esta declaración INSERT, intentamos insertar dos cursos con el mismo ID de sujeto de clave principal 2, lo cual es una violación de la restricción de clave principal.
Los comandos deberían funcionar bien y no debería recibir ningún error. Como sigue:
Paso 3) Seleccione todos los temas de la tabla de la siguiente manera:
SELECCIONAR * DE Temas;
Esto le dará la lista de temas:
Observe que solo se insertaron tres materias " Álgebra, curso de base de datos y algoritmos " en lugar de 4 filas.
La fila que tiene el valor que viola la restricción de clave principal, que es "Estructuras de datos", se ignoró y no se insertó. Sin embargo, SQLite continúa ejecutando otras declaraciones después de esa fila.
Paso 4) BORRAR los sujetos de la tabla para crearla nuevamente con una cláusula ON CONFLICT diferente para el siguiente ejemplo ejecutando el siguiente comando:
DROP TABLE Sujetos;
El comando soltar elimina toda la tabla. Los temas de tabla ahora no existen.
EN CONFLICTO REEMPLAZAR Ejemplo
Paso 1) Cree un nuevo asunto de tabla de la siguiente manera:
CREAR TABLA [Sujetos] ([SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,[SubjectName] NVARCHAR NO NULL);
Observe que definimos una restricción PRIMARY KEY en la columna SubjectId. La restricción de clave principal no permitirá que se inserten dos valores duplicados en la columna SubjectId para que todos los valores de esa columna sean únicos.
Además, observe que elegimos una opción de resolución de conflictos para que sea " REEMPLAZAR ". El comando debería ejecutarse correctamente y no debería recibir ningún error:
Paso 2) Ahora, insertemos algunos valores en la nueva tabla Subjects, pero con un valor que viole la restricción de clave principal:
INSERTAR EN LAS Materias VALORES (1, 'Álgebra');INSERTAR EN LAS asignaturas VALORES (2, 'Curso de base de datos');INSERT INTO Sujetos VALORES (2, 'Estructuras de datos');INSERT INTO Sujetos VALORES (4, 'Algoritmos');
En esta declaración INSERT, intentamos insertar dos cursos con el mismo ID de sujeto de clave principal 2, lo cual es una violación de la restricción de clave principal.
Los comandos deberían funcionar bien y no debería recibir ningún error. Como sigue:
Paso 3) Seleccione todos los temas de la tabla de la siguiente manera:
SELECCIONAR * DE Temas;
Esto le dará la lista de temas:
Observe que solo se insertaron tres materias " Álgebra, estructuras de datos y algoritmos " mientras que intentamos insertar 4 filas.
La fila que tiene el valor que viola la restricción de clave principal, que es " Estructuras de datos " reemplazó el valor " Curso de base de datos " de la siguiente manera:
- Las dos primeras declaraciones de inserción funcionan bien sin problemas. Se insertarán dos asignaturas del curso de álgebra y base de datos con los identificadores 1, 2.
- Cuando SQLite intenta ejecutar la tercera instrucción de inserción con SubjectId 2 y SubjectName " Data Structures ", descubre que ya hay un sujeto con SubjectId = 2. Lo cual es una violación de la restricción de clave principal definida en la columna SubjectId.
- SQLite elegirá una resolución REEMPLAZAR para este conflicto. Reemplaza el valor que ya existe en la tabla de sujetos con el nuevo valor de la declaración de inserción. Por lo tanto, el SubjectName del " Curso de base de datos " será reemplazado por el SubjectName de " Estructuras de datos ".
Resumen:
Las cláusulas INSERT, UPDATE y DELETE se utilizan para modificar los datos en la base de datos SQLite. La cláusula CONFLICT es una cláusula poderosa para resolver cualquier conflicto entre los datos y los datos a modificar.