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.