sql >> Databasteknik >  >> RDS >> SQLite

SQLite REPLACE-sats

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.


  1. SELECT / GROUP BY - tidssegment (10 sekunder, 30 sekunder, etc)

  2. Ta bort fråga och uppdatera i ListView i Android (sqlite)

  3. Hur REPLACE() fungerar i MariaDB

  4. JSON_MERGE_PRESERVE() – Slå samman flera JSON-dokument i MySQL