sql >> Databáze >  >> RDS >> SQLite

Příkaz SQLite REPLACE

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.


  1. Funkce NLS_LOWER() v Oracle

  2. Jak srovnávat výkon MySQL a MariaDB pomocí SysBench

  3. jak nastavit sloupec automatického přírůstku pomocí vývojáře sql

  4. Dočasně vypnout omezení (MS SQL)