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.