Shrnutí :v tomto tutoriálu se naučíte používat SQLite REPLACE
příkaz pro vložení nebo nahrazení existujícího řádku v tabulce.
Úvod do SQLite REPLACE
prohlášení
Myšlenka REPLACE
prohlášení je, že když UNIQUE
nebo PRIMARY KEY
dojde k porušení omezení, provede následující:
- Nejprve odstraňte existující řádek, který způsobuje porušení omezení.
- Zadruhé vložte nový řádek.
Ve druhém kroku, pokud dojde k porušení omezení, např. NOT NULL
dojde k omezení, REPLACE
příkaz zruší akci a vrátí transakci zpět.
Následující text ilustruje syntaxi REPLACE
prohlášení.
INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Nebo zkráceně:
REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Podívejme se na některé příklady použití SQLite REPLACE
prohlášení, abyste pochopili, jak to funguje.
SQLite REPLACE
příklady příkazů
Nejprve vytvořte novou tabulku s názvem positions
s následující strukturou.
CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
min_salary NUMERIC
);
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Za druhé vložte několik řádků do positions
tabulka.
INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Za třetí ověřte vložení pomocí následujícího SELECT
prohlášení.
SELECT * FROM positions;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Následující příkaz vytvoří jedinečný index pro title
sloupec positions
tabulku, abyste zajistili, že nebude mít žádný duplicitní název pozice:
CREATE UNIQUE INDEX idx_positions_title
ON positions (title);
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Předpokládejme, že chcete přidat pozici do positions
tabulka pokud neexistuje, pokud pozice existuje, aktualizujte aktuální.
Následující REPLACE
příkaz vloží nový řádek do positions
tabulky, protože název pozice Full Stack Developer
není na positions
tabulka.
REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Můžete ověřit REPLACE
operace pomocí SELECT
prohlášení.
SELECT
id,title,min_salary
FROM
positions;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Viz následující prohlášení.
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Nejprve SQLite zkontroloval UNIQUE
omezení.
Za druhé, protože toto prohlášení porušuje UNIQUE
omezení pokusem o přidání DBA
titul, který již existuje, SQLite smazal existující řádek.
Za třetí, SQLite vložil nový řádek s daty poskytnutými REPLACE
prohlášení.
Všimněte si, že REPLACE
příkaz znamená INSERT
nebo REPLACE
, nikoli INSERT
nebo UPDATE
.
Viz následující prohlášení.
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Příkaz se pokusil provést aktualizaci min_salary
pro pozici s ID 2, která je vývojářem.
Za prvé, pozice s ID 2 již existuje, REPLACE
příkaz jej odstraní.
Poté se SQLite pokusil vložit nový řádek se dvěma sloupci:( id
, min_salary
). Porušuje však NOT NULL
omezení sloupce nadpisu. Proto SQLite odvolá transakci.
Pokud title
sloupec nemá NOT NULL
omezení, REPLACE
příkaz vloží nový řádek, jehož sloupec nadpisu je NULL
.
V tomto tutoriálu jsme vám ukázali, jak používat SQLite REPLACE
příkaz pro vložení nebo nahrazení řádku v tabulce.