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

Declaración de reemplazo de SQLite

Resumen :en este tutorial, aprenderá a usar SQLite REPLACE instrucción para insertar o reemplazar la fila existente en una tabla.

Introducción a SQLite REPLACE declaración

La idea del REPLACE declaración es que cuando un UNIQUE o PRIMARY KEY se produce una violación de la restricción, hace lo siguiente:

  • Primero, elimine la fila existente que causa una violación de restricción.
  • Segundo, inserte una nueva fila.

En el segundo paso, si se viola alguna restricción, por ejemplo, NOT NULL se produce una restricción, REPLACE declaración cancelará la acción y revertirá la transacción.

A continuación se ilustra la sintaxis de REPLACE declaración.

INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);Code language: SQL (Structured Query Language) (sql)

O en forma abreviada:

REPLACE INTO table(column_list)
VALUES(value_list);Code language: SQL (Structured Query Language) (sql)

Echemos un vistazo a algunos ejemplos del uso de SQLite REPLACE declaración para entender cómo funciona.

El SQLite REPLACE ejemplos de declaraciones

Primero, cree una nueva tabla llamada positions con la siguiente estructura.

CREATE TABLE IF NOT EXISTS positions (
	id INTEGER PRIMARY KEY,
	title TEXT NOT NULL,
	min_salary NUMERIC
);Code language: SQL (Structured Query Language) (sql)

Pruébalo

En segundo lugar, inserte algunas filas en las positions mesa.

INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
       ('Developer', 100000),
       ('Architect', 150000);Code language: SQL (Structured Query Language) (sql)

Pruébalo

Tercero, verifique el inserto usando el siguiente SELECT declaración.

SELECT * FROM positions;Code language: SQL (Structured Query Language) (sql)

Pruébalo

La siguiente declaración crea un índice único en el title columna de las positions tabla para asegurarse de que no tenga ningún título de puesto duplicado:

CREATE UNIQUE INDEX idx_positions_title 
ON positions (title);Code language: SQL (Structured Query Language) (sql)

Pruébalo

Supongamos que desea agregar una posición a las positions table si no existe, en caso de que exista el puesto actualizar el actual.

El siguiente REPLACE declaración inserta una nueva fila en las positions porque el título del puesto Full Stack Developer no está en las positions mesa.

REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);Code language: SQL (Structured Query Language) (sql)

Pruébalo

Puede verificar el REPLACE operación usando el SELECT declaración.

SELECT
	id,title,min_salary
FROM
	positions;Code language: SQL (Structured Query Language) (sql)

Pruébalo

Consulte la siguiente declaración.

REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql)

Pruébalo

Primero, SQLite verificó el UNIQUE restricción.

Segundo, porque esta declaración violó el UNIQUE restricción al intentar agregar el DBA título que ya existe, SQLite eliminó la fila existente.

En tercer lugar, SQLite insertó una nueva fila con los datos proporcionados por REPLACE declaración.

Observe que REPLACE instrucción significa INSERT o REPLACE , no INSERT o UPDATE .

Consulte la siguiente declaración.

REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);Code language: SQL (Structured Query Language) (sql)

Pruébalo

Lo que la declaración intentó hacer es actualizar el min_salary para el puesto con id 2, que es el desarrollador.

Primero, la posición con id 2 ya existe, el REPLACE declaración lo elimina.

Luego, SQLite intentó insertar una nueva fila con dos columnas:( id , min_salary ). Sin embargo, viola el NOT NULL restricción de la columna de título. Por lo tanto, SQLite revierte la transacción.

Si el title la columna no tiene el NOT NULL restricción, el REPLACE declaración insertará una nueva fila cuya columna de título es NULL .

En este tutorial, le mostramos cómo usar SQLite REPLACE instrucción para insertar o reemplazar una fila en una tabla.