Podsumowanie :w tym samouczku dowiesz się, jak używać SQLite REPLACE
oświadczenie, aby wstawić lub zastąpić istniejący wiersz w tabeli.
Wprowadzenie do SQLite REPLACE
oświadczenie
Idea REPLACE
oświadczenie jest takie, że gdy UNIQUE
lub PRIMARY KEY
nastąpi naruszenie ograniczenia, działa w następujący sposób:
- Najpierw usuń istniejący wiersz, który powoduje naruszenie ograniczenia.
- Po drugie, wstaw nowy wiersz.
W drugim kroku, jeśli jakiekolwiek naruszenie ograniczenia, np. NOT NULL
wystąpi ograniczenie, REPLACE
oświadczenie spowoduje przerwanie akcji i wycofanie transakcji.
Poniższe ilustruje składnię REPLACE
oświadczenie.
INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Lub w krótkiej formie:
REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Rzućmy okiem na kilka przykładów użycia SQLite REPLACE
oświadczenie, aby zrozumieć, jak to działa.
SQLite REPLACE
przykłady wypowiedzi
Najpierw utwórz nową tabelę o nazwie positions
o następującej strukturze.
CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
min_salary NUMERIC
);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Po drugie, wstaw kilka wierszy w positions
tabela.
INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Po trzecie, zweryfikuj wstawkę za pomocą następującego SELECT
oświadczenie.
SELECT * FROM positions;
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Poniższa instrukcja tworzy unikalny indeks w title
kolumna positions
tabeli, aby upewnić się, że nie ma zduplikowanego tytułu pozycji:
CREATE UNIQUE INDEX idx_positions_title
ON positions (title);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Załóżmy, że chcesz dodać pozycję do positions
tabela, jeśli nie istnieje, jeśli pozycja istnieje, zaktualizuj bieżącą.
Następujący REPLACE
instrukcja wstawia nowy wiersz w positions
tabeli, ponieważ tytuł pozycji Full Stack Developer
nie znajduje się w positions
tabela.
REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Możesz zweryfikować REPLACE
operacja za pomocą SELECT
oświadczenie.
SELECT
id,title,min_salary
FROM
positions;
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Zobacz następujące oświadczenie.
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
Najpierw SQLite sprawdził UNIQUE
ograniczenie.
Po drugie, ponieważ to stwierdzenie naruszyło UNIQUE
ograniczenie, próbując dodać DBA
tytuł, który już istnieje, SQLite usunął istniejący wiersz.
Po trzecie, SQLite wstawił nowy wiersz z danymi dostarczonymi przez REPLACE
oświadczenie.
Zauważ, że REPLACE
oświadczenie oznacza INSERT
lub REPLACE
, a nie INSERT
lub UPDATE
.
Zobacz następujące oświadczenie.
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);
Code language: SQL (Structured Query Language) (sql)
Wypróbuj
To, co próbowała zrobić instrukcja, to zaktualizować min_salary
dla pozycji o id 2, która jest deweloperem.
Po pierwsze, pozycja o id 2 już istnieje, REPLACE
oświadczenie usuwa go.
Następnie SQLite próbował wstawić nowy wiersz z dwiema kolumnami:( id
, min_salary
). Jednak narusza NOT NULL
ograniczenie kolumny tytułowej. Dlatego SQLite wycofuje transakcję.
Jeśli title
kolumna nie ma NOT NULL
ograniczenie, REPLACE
instrukcja wstawi nowy wiersz, którego tytuł kolumny to NULL
.
W tym samouczku pokazaliśmy, jak używać SQLite REPLACE
instrukcja wstawiania lub zastępowania wiersza w tabeli.