Oversigt :i denne øvelse lærer du, hvordan du bruger SQLite REPLACE sætning for at indsætte eller erstatte den eksisterende række i en tabel.
Introduktion til SQLite REPLACE erklæring
Ideen med REPLACE sætning er, at når en UNIQUE eller PRIMARY KEY overtrædelse af begrænsninger, gør det følgende:
- Først skal du slette den eksisterende række, der forårsager en overtrædelse af begrænsninger.
- For det andet, indsæt en ny række.
I det andet trin, hvis en begrænsning overtræder, f.eks. NOT NULL begrænsning opstår, REPLACE erklæring vil afbryde handlingen og rulle transaktionen tilbage.
Det følgende illustrerer syntaksen for REPLACE erklæring.
INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);Code language: SQL (Structured Query Language) (sql) Eller i en kort form:
REPLACE INTO table(column_list)
VALUES(value_list);Code language: SQL (Structured Query Language) (sql)
Lad os tage et kig på nogle eksempler på brug af SQLite REPLACE erklæring for at forstå, hvordan det virker.
SQLite REPLACE udsagnseksempler
Først skal du oprette en ny tabel med navnet positions med følgende 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) Prøv det
For det andet, indsæt nogle rækker i positions tabel.
INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);Code language: SQL (Structured Query Language) (sql) Prøv det
For det tredje skal du bekræfte indsættelsen ved at bruge følgende SELECT erklæring.
SELECT * FROM positions;Code language: SQL (Structured Query Language) (sql) Prøv det
Følgende sætning opretter et unikt indeks på title kolonne i positions tabel for at sikre, at den ikke har nogen dubleret positionstitel:
CREATE UNIQUE INDEX idx_positions_title
ON positions (title);Code language: SQL (Structured Query Language) (sql) Prøv det
Antag, at du vil tilføje en position til positions tabel, hvis den ikke findes, i tilfælde af at positionen eksisterer, skal du opdatere den nuværende.
Følgende REPLACE sætning indsætter en ny række i positions tabel, fordi positionstitlen Full Stack Developer er ikke i positions tabel.
REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);Code language: SQL (Structured Query Language) (sql) Prøv det
Du kan bekræfte REPLACE handling ved hjælp af SELECT erklæring.
SELECT
id,title,min_salary
FROM
positions;Code language: SQL (Structured Query Language) (sql) Prøv det
Se følgende erklæring.
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql) Prøv det
Først kontrollerede SQLite koden UNIQUE begrænsning.
For det andet fordi denne erklæring overtrådte UNIQUE begrænsning ved at prøve at tilføje DBA titel, der allerede eksisterer, slettede SQLite den eksisterende række.
For det tredje indsatte SQLite en ny række med dataene leveret af REPLACE erklæring.
Bemærk, at REPLACE sætning betyder INSERT eller REPLACE , ikke INSERT eller UPDATE .
Se følgende erklæring.
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);Code language: SQL (Structured Query Language) (sql) Prøv det
Hvad erklæringen forsøgte at gøre, er at opdatere min_salary for stillingen med id 2, som er udvikleren.
For det første eksisterer positionen med id 2 allerede, REPLACE statement fjerner det.
Derefter forsøgte SQLite at indsætte en ny række med to kolonner:( id , min_salary ). Det overtræder dog NOT NULL begrænsning af titelkolonnen. Derfor ruller SQLite transaktionen tilbage.
Hvis title kolonnen har ikke NOT NULL begrænsning, REPLACE sætning vil indsætte en ny række, hvis titelkolonnen er NULL .
I denne øvelse har vi vist dig, hvordan du bruger SQLite REPLACE sætning for at indsætte eller erstatte en række i en tabel.