SQLite
 sql >> Database >  >> RDS >> SQLite

Istruzione SQLite REPLACE

Riepilogo :in questo tutorial imparerai come usare SQLite REPLACE istruzione per inserire o sostituire la riga esistente in una tabella.

Introduzione a SQLite REPLACE dichiarazione

L'idea del REPLACE istruzione è che quando un UNIQUE o PRIMARY KEY si verifica una violazione del vincolo, esegue le seguenti operazioni:

  • In primo luogo, elimina la riga esistente che causa una violazione del vincolo.
  • In secondo luogo, inserisci una nuova riga.

Nel secondo passaggio, in caso di violazione di un vincolo, ad esempio NOT NULL si verifica il vincolo, il REPLACE l'istruzione interromperà l'azione e annullerà la transazione.

Di seguito viene illustrata la sintassi di REPLACE dichiarazione.

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

O in forma breve:

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

Diamo un'occhiata ad alcuni esempi di utilizzo di SQLite REPLACE dichiarazione per capire come funziona.

Il REPLACE di SQLite esempi di affermazioni

Innanzitutto, crea una nuova tabella denominata positions con la seguente struttura.

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

Provalo

In secondo luogo, inserisci alcune righe nelle positions tabella.

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

Provalo

Terzo, verifica l'inserto usando il seguente SELECT dichiarazione.

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

Provalo

La seguente istruzione crea un indice univoco sul title colonna delle positions tabella per assicurarsi che non abbia alcun titolo di posizione duplicato:

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

Provalo

Supponiamo di voler aggiungere una posizione nelle positions tabella se non esiste, se la posizione esiste, aggiorna quella corrente.

Il seguente REPLACE istruzione inserisce una nuova riga nelle positions tabella perché il titolo della posizione Full Stack Developer non è nelle positions tabella.

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

Provalo

Puoi verificare il REPLACE operazione utilizzando il SELECT dichiarazione.

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

Provalo

Vedi la seguente dichiarazione.

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

Provalo

Per prima cosa, SQLite ha controllato UNIQUE vincolo.

Secondo, perché questa affermazione ha violato il UNIQUE vincolo provando ad aggiungere il DBA title già esistente, SQLite ha eliminato la riga esistente.

Terzo, SQLite ha inserito una nuova riga con i dati forniti da REPLACE dichiarazione.

Si noti che REPLACE istruzione significa INSERT o REPLACE , non INSERT o UPDATE .

Vedi la seguente dichiarazione.

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

Provalo

Quello che la dichiarazione ha cercato di fare è aggiornare il min_salary per la posizione con id 2, che è lo sviluppatore.

Innanzitutto, la posizione con id 2 esiste già, il REPLACE l'istruzione lo rimuove.

Quindi, SQLite ha provato a inserire una nuova riga con due colonne:( id , min_salary ). Tuttavia, viola il NOT NULL vincolo della colonna del titolo. Pertanto, SQLite annulla la transazione.

Se il title la colonna non ha il NOT NULL vincolo, il REPLACE inserirà una nuova riga la cui colonna del titolo è NULL .

In questo tutorial, ti abbiamo mostrato come utilizzare SQLite REPLACE istruzione per inserire o sostituire una riga in una tabella.