Sammanfattning :i denna handledning kommer du att lära dig hur du använder SQLite REPLACE
för att infoga eller ersätta den befintliga raden i en tabell.
Introduktion till SQLite REPLACE
uttalande
Idén med REPLACE
uttalandet är att när en UNIQUE
eller PRIMARY KEY
begränsningsöverträdelse inträffar gör den följande:
- Ta först bort den befintliga raden som orsakar en överträdelse av begränsningen.
- För det andra, infoga en ny rad.
I det andra steget, om någon överträdelse av begränsningar, t.ex. NOT NULL
begränsning uppstår, REPLACE
uttalandet kommer att avbryta åtgärden och återställa transaktionen.
Följande illustrerar syntaxen för REPLACE
uttalande.
INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Eller i kort form:
REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Låt oss ta en titt på några exempel på hur du använder SQLite REPLACE
uttalande för att förstå hur det fungerar.
SQLite REPLACE
exempel på uttalanden
Skapa först en ny tabell med namnet positions
med följande struktur.
CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
min_salary NUMERIC
);
Code language: SQL (Structured Query Language) (sql)
Prova det
För det andra, infoga några rader i positions
bord.
INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);
Code language: SQL (Structured Query Language) (sql)
Prova det
För det tredje, verifiera infogningen med följande SELECT
uttalande.
SELECT * FROM positions;
Code language: SQL (Structured Query Language) (sql)
Prova det
Följande sats skapar ett unikt index på title
kolumnen för positions
tabell för att säkerställa att den inte har någon dubblettpositionstitel:
CREATE UNIQUE INDEX idx_positions_title
ON positions (title);
Code language: SQL (Structured Query Language) (sql)
Prova det
Anta att du vill lägga till en position i positions
tabell om den inte finns, om positionen finns, uppdatera den nuvarande.
Följande REPLACE
satsen infogar en ny rad i positions
tabell eftersom positionstiteln Full Stack Developer
är inte i positions
bord.
REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);
Code language: SQL (Structured Query Language) (sql)
Prova det
Du kan verifiera REPLACE
operation med SELECT
uttalande.
SELECT
id,title,min_salary
FROM
positions;
Code language: SQL (Structured Query Language) (sql)
Prova det
Se följande uttalande.
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql)
Prova det
Först kontrollerade SQLite koden UNIQUE
begränsning.
För det andra eftersom detta uttalande bröt mot UNIQUE
begränsning genom att försöka lägga till DBA
titel som redan finns, tog SQLite bort den befintliga raden.
För det tredje infogade SQLite en ny rad med data som tillhandahålls av REPLACE
uttalande.
Lägg märke till att REPLACE
uttalande betyder INSERT
eller REPLACE
, inte INSERT
eller UPDATE
.
Se följande uttalande.
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);
Code language: SQL (Structured Query Language) (sql)
Prova det
Vad uttalandet försökte göra är att uppdatera min_salary
för positionen med id 2, som är utvecklaren.
För det första finns positionen med id 2 redan, REPLACE
uttalandet tar bort det.
Sedan försökte SQLite infoga en ny rad med två kolumner:( id
, min_salary
). Det bryter dock mot NOT NULL
begränsning i rubrikkolumnen. Därför återställer SQLite transaktionen.
Om title
kolumnen har inte NOT NULL
begränsning, REPLACE
kommer att infoga en ny rad vars rubrikkolumn är NULL
.
I den här handledningen har vi visat dig hur du använder SQLite REPLACE
för att infoga eller ersätta en rad i en tabell.