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.