SQLite INSERTAR, ACTUALIZAR, ELIMINAR consulta con ejemplo

⚡ Resumen inteligente

SQLite Las instrucciones INSERT, UPDATE y DELETE modifican los datos de una base de datos añadiendo nuevas filas, cambiando los valores existentes y eliminando registros, mientras que la cláusula ON CONFLICT decide cómo se resuelven las violaciones de restricciones durante esas operaciones.

  • 📝 INSERTAR: La instrucción INSERT agrega una o más filas nuevas, listando las columnas de destino y sus valores con la cláusula VALUES.
  • ✏️ ACTUALIZACIÓN: La instrucción UPDATE modifica los valores de las columnas existentes, utilizando SET para los datos nuevos y WHERE para seleccionar filas específicas.
  • 🗑️ BORRAR: La instrucción DELETE elimina las filas que coinciden con una condición WHERE, o todas las filas cuando se omite la cláusula WHERE.
  • ⚠️ Cláusula de conflicto: La cláusula ON CONFLICT resuelve las violaciones de restricciones mediante ROLLBACK, ABORT, FAIL, IGNORE o REPLACE.
  • 🔁 Actas: Una transacción de base de datos agrupa varias operaciones en una sola unidad que se confirma o se cancela por completo.
  • 🤖 Asistencia de IA: Las herramientas de IA de texto a SQL y GitHub Copilot generan SQLite Instrucciones INSERTAR, ACTUALIZAR y ELIMINAR a partir de indicaciones en lenguaje natural.

SQLite INSERTAR, ACTUALIZAR, ELIMINAR Consulta

Consulta de inserción, actualización y eliminación en SQLite

Las cláusulas de modificación de datos en SQLite son declaraciones INSERTAR, ACTUALIZAR y ELIMINAR. Se utiliza para insertar nuevas filas, actualizar valores existentes o eliminar filas de la base de datos.

Tenga en cuenta que, para todos los ejemplos siguientes, debe ejecutar sqlite3.exe y abrir una conexión a la base de datos de muestra como se indica a continuación:

Paso 1) En este paso,

  • Abra Mi PC y navegue al siguiente directorio “C:\sqlite” y
  • Luego, abre “sqlite3.exe”:

SQLite Consulta: INSERTAR, ACTUALIZAR, ELIMINAR

Paso 2) Abra la base de datos “TutorialsSampleDB.db” con el siguiente comando:

.open TutorialsSampleDB.db

SQLite Consulta: INSERTAR, ACTUALIZAR, ELIMINAR

Ahora está listo para ejecutar cualquier tipo de consulta en la base de datos.

SQLite INSERT

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:

SQLite INSERT

  • Después de la cláusula INSERT, debe indicar en qué tabla necesita insertar los valores.
  • Después del nombre de la tabla en la que escribe la lista de columnas en las que desea insertar los valores.
  • Puede ignorar el nombre de las columnas y no escribirles.
  • 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 están definidas 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.

SQLite Insertar ejemplo

En el siguiente ejemplo, insertaremos 2 filas en la tabla de estudiantes, una para cada estudiante:

INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
              VALUES(11, 'Ahmad', 4, '1997-10-12');

INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');

Esto debería ejecutarse correctamente y no hay ningún resultado para esto:

SQLite recuadro

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 instrucción, enumeramos los nombres de las columnas “StudentId, StudentName, DepartmentId, DateOfBirth”. Sin embargo, en la segunda instrucción, no lo hicimos.

Los cuatro valores “12, 'Aly', 4, '1996-10-12'” se insertarán en las cuatro columnas de la tabla Estudiantes en el mismo orden en que se definen las columnas.

Ahora, verifiquemos que los dos estudiantes se insertaron en la tabla Estudiantes ejecutando lo siguiente pregunta:

SELECT * FROM Students;

Luego deberías ver los dos estudiantes devueltos por esa consulta de la siguiente manera:

SQLite recuadro

SQLite Actualizar

SQLite La consulta UPDATE se utiliza para modificar los registros existentes en una tabla. Puede utilizar la cláusula WHERE con la consulta UPDATE para actualizar las filas seleccionadas. La cláusula UPDATE actualiza una tabla modificando un valor de una columna específica. La siguiente es la sintaxis de la cláusula UPDATE:

SQLite Actualizar

Como sigue:

  • Después de la “cláusula de actualización”, debes escribir el nombre de la tabla a actualizar.
  • Debe escribir una “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. Puedes 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 verdadera. Si no especificó una cláusula WHERE, se actualizarán todas las filas.

SQLite Ejemplo de actualización

En la siguiente declaración UPDATE, actualizaremos el DepartmentId del Estudiante con StudentId = 6 para que sea 3:

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

Esto debería ejecutarse correctamente y no debería obtener ningún resultado:

SQLite Actualizar

En la cláusula ACTUALIZAR, 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 estudiante con ID 6 esté actualizado, ejecutando el siguiente comando:

SELECT * FROM Students WHERE StudentId = 6;

Ahora debería ver que el valor del Id. del departamento ahora es 3, como se muestra a continuación:

SQLite Actualizar

SQLite Eliminar

SQLite La consulta DELETE se utiliza para eliminar registros existentes de una tabla especificada. Puede utilizar la cláusula WHERE con consultas DELETE para eliminar las filas seleccionadas.

La cláusula DELETE tiene la siguiente sintaxis:

SQLite Eliminar

  • Debes escribir el nombre de la tabla después de la cláusula DELETE FROM, de la cual deseas eliminar registros. (Nota: la cláusula DELETE se usa para eliminar algunos registros de una tabla o todos los registros, pero no elimina la tabla en sí. Sin embargo, la cláusula DROP se usa para eliminar la tabla completa con todos sus registros).
  • Si escribe la cláusula DELETE como esta “BORRAR DEL gurú”, esto eliminará todos los registros de la tabla “gurú”.
  • Puede especificar una condición WHERE con una expresión si desea eliminar algunas filas específicas. Solo se eliminarán las filas cuya expresión se evalúe como verdadera. Por ejemplo, “BORRAR DEL gurú DONDE id > 5”: esto eliminará solo los registros que tengan una identificación mayor que 5.

Ejemplo

En la siguiente declaración, eliminaremos dos estudiantes con StudentId 11 y 12:

DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;

La expresión “StudentId = 11 O StudentId = 12” será verdadera solo para los 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:

SQLite Eliminar

Puede verificar que se eliminaron los dos estudiantes seleccionando todos los registros de la tabla Estudiantes de la siguiente manera:

SELECT * FROM Students;

No deberías ver a los dos estudiantes con ID 11 y 12 de la siguiente manera:

SQLite Eliminar

SQLite Cláusula de conflicto

Supongamos que tiene una columna que tiene una de las siguientes restricciones: UNIQUE, NOT NULL, CHECK o PRIMARY KEY. Y luego intenta 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), lo que entra en conflicto con la restricción ÚNICA. Luego, la cláusula CONFLICTO le permite elegir qué hacer en tales casos para resolver este conflicto.

Antes de continuar explicando cómo la cláusula CONFLICTO 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 SQLite Operaciones (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 correctamente o no se ejecute ninguna. Todas las operaciones se cancelarán si una de ellas no se ejecuta.

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 retirar dinero de la primera cuenta y depositarlo en otra cuenta. Esta transacción debe completarse o cancelarse por completo y no fallar a mitad de camino.

Aquí está la lista de cinco resoluciones que puede elegir en la cláusula CONFLICTO:

  1. REVERSIÓN: esto revertirá la transacción en la que el usuario actual SQLite declaración 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 arrojará un error.
  2. ABORTAR: esto abortará (cancelará) la operación actual. SQLite Solo la declaración que tiene 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, entonces solo no se actualizará el quinto valor, pero sí las otras 9 filas. Se arrojará un error.
  3. FALLO: aborta la operación actual. SQLite declaración que tiene el conflicto. Sin embargo, la transacción no continuará, pero se confirmarán los cambios realizados en las filas anteriores a 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 arrojará un error.
  4. IGNORAR: esto omitirá la fila que contiene la violación de la restricción y continuará procesando las demás filas siguientes de la SQLite declaración. 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 se detendrá en la fila que tiene el valor de conflicto. No se generará ningún error.
  5. REEMPLAZAR: depende del tipo de restricción que presenta la violación:
    • Cuando hay una violación de 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, entonces SQLite abortará la declaración (la declaración será cancelada)
    • SI se produce la infracción de la restricción CHECK, la cláusula será abortada.

Nota: Las cinco resoluciones anteriores son opciones sobre cómo resolver el conflicto. No necesariamente lo que funciona para un conflicto es aplicable a otros tipos de conflictos.

Cómo declarar la cláusula CONFLICTO

Puede declarar la cláusula ON CONFLICT cuando defina una restricción para una definición de columna dentro de la cláusula CREATE TABLE. Utilice la siguiente sintaxis:

SQLite Cláusula de conflicto

Puede elegir una de las cinco resoluciones para resolver el conflicto como se explicó anteriormente.

SOBRE EL CONFLICTO IGNORAR Ejemplo

Paso 1) Cree un nuevo asunto de tabla de la siguiente manera:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
    [SubjectName] NVARCHAR NOT NULL
);

Observe que hemos definido una restricción de CLAVE PRIMARIA en la columna SubjectId. Esta restricción impedirá que se inserten dos valores duplicados en la columna SubjectId, garantizando así que todos los valores sean únicos. Además, observe que hemos seleccionado la resolución de conflictos como "IGNORAR".

El comando debería ejecutarse correctamente y no debería aparecer ningún error:

SOBRE EL CONFLICTO IGNORAR Ejemplo

Paso 2) Ahora, insertemos algunos valores en los nuevos asuntos de la tabla, pero con un valor que viole la restricción de la clave principal:

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

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 ejecutarse correctamente y no debería aparecer ningún error, como se muestra a continuación:

SOBRE EL CONFLICTO IGNORAR Ejemplo

Paso 3) Seleccione todos los temas de la tabla de la siguiente manera:

SELECT * FROM Subjects;

Esto le dará la lista de temas:

SOBRE EL CONFLICTO IGNORAR Ejemplo

Observe que solo se insertaron tres materias: “Álgebra, Curso de bases de datos y Algorithms”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) ELIMINE la tabla subject para crearla nuevamente con una cláusula ON CONFLICT diferente para el siguiente ejemplo ejecutando el siguiente comando:

DROP TABLE Subjects;

El comando soltar elimina toda la tabla. Los asuntos de la tabla ahora no existen.

EN CONFLICTO REEMPLAZAR Ejemplo

Paso 1) Cree un nuevo asunto de tabla de la siguiente manera:

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
    [SubjectName] NVARCHAR NOT 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, por lo que todos los valores de esa columna deben ser únicos.

Además, tenga en cuenta que hemos elegido la opción de resolución de conflictos "REEMPLAZAR". El comando debería ejecutarse correctamente y no debería aparecer ningún error.

EN CONFLICTO REEMPLAZAR Ejemplo

Paso 2) Ahora, insertemos algunos valores en la nueva tabla Asuntos, pero con un valor que viola la restricción de clave principal:

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

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 ejecutarse correctamente y no debería aparecer ningún error, como se muestra a continuación:

EN CONFLICTO REEMPLAZAR Ejemplo

Paso 3) Seleccione todos los temas de la tabla de la siguiente manera:

SELECT * FROM Subjects;

Esto le dará la lista de temas:

EN CONFLICTO REEMPLAZAR Ejemplo

Observe que solo se insertaron tres temas: “Álgebra, Estructuras de datos y Algorithms”mientras que intentamos insertar 4 filas.

La fila que tiene el valor que viola la restricción de clave primaria, 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 materias Álgebra y Curso de Bases de Datos con ids 1, 2.
  • Cuando SQLite Al intentar ejecutar la tercera instrucción INSERT con SubjectId 2 y SubjectName “Data Structures”, descubre que ya existe un sujeto con SubjectId = 2. Esto constituye una violación de la restricción de clave primaria definida en la columna SubjectId.
  • SQLite Se elegirá una resolución REEMPLAZAR para este conflicto. Esta reemplaza el valor existente en la tabla de asignaturas con el nuevo valor de la instrucción INSERT. Por lo tanto, la asignatura "Curso de base de datos" se reemplazará por "Estructuras de datos".

Preguntas Frecuentes

UPSERT combina inserción y actualización. Dado que SQLite 3.24.0 (2018), INSERT INTO … ON CONFLICT(column) DO UPDATE SET … inserta una nueva fila o actualiza la existente cuando se produce un conflicto de CLAVE ÚNICA o PRIMARIA. DO NOTHING omite la fila silenciosamente.

INSERTAR O REEMPLAZAR elimina la fila conflictiva e inserta una nueva, por lo que las columnas no listadas se restablecen a sus valores predeterminados. EN CONFLICTO HACER ACTUALIZAR edita la fila existente en su lugar, manteniendoping otras columnas intactas, lo que lo convierte en la verdadera operación de inserción/actualización más segura.

Enumere varios grupos de valores después de VALUES, separados por comas: INSERT INTO Students (id, name) VALUES (1,'A'), (2,'B'), (3,'C');. Este formulario de varias filas funciona desde SQLite 3.7.11 y es más rápido que ejecutar una instrucción INSERT por fila.

Ejecuta DELETE FROM table_name; sin una cláusula WHERE. SQLite No tiene comando TRUNCATE, pero aplica una optimización de truncamiento que elimina todas las filas a la vez. La estructura de la tabla se mantiene; use DROP TABLE para eliminar la tabla por completo.

Desde SQLite En la versión 3.35.0 (2021), las instrucciones INSERT, UPDATE y DELETE aceptan una cláusula RETURNING opcional que devuelve las filas afectadas. Por ejemplo, INSERT … RETURNING id; devuelve los valores generados inmediatamente, evitando una instrucción SELECT aparte para leer los cambios.

Utilice INSERT INTO … SELECT: INSERT INTO Archive (id, nombre) SELECCIONAR id, nombre DE Estudiantes DONDE DepartmentId = 4;. SQLite inserta cada fila que devuelve la consulta SELECT, por lo que el orden y el número de columnas deben coincidir con la tabla de destino.

Sí. Los asistentes de texto a SQL con IA convierten las solicitudes en inglés simple en SQLite Instrucciones INSERT, UPDATE y DELETE, incluyendo las cláusulas WHERE y ON CONFLICT. Proporcionar los nombres de las tablas y columnas mejora la precisión, y cada instrucción generada debe revisarse y probarse antes de ejecutarla con datos reales.

Copiloto de GitHub sugieren SQLite Consultas INSERT, UPDATE y DELETE en línea en editores como VS CodeLee el esquema y los comentarios cercanos, por lo que las sugerencias de autocompletado reutilizan los nombres reales de las tablas y columnas, pero aun así debe verificar cada instrucción antes de ejecutarla.

Resumir este post con: