Резюме :в този урок ще научите как да използвате SQLite REPLACE
оператор за вмъкване или замяна на съществуващия ред в таблица.
Въведение в SQLite REPLACE
изявление
Идеята за REPLACE
твърдението е, че когато UNIQUE
или PRIMARY KEY
възниква нарушение на ограничението, то прави следното:
- Първо, изтрийте съществуващия ред, който причинява нарушение на ограничението.
- Второ, вмъкнете нов ред.
Във втората стъпка, ако има някакво нарушение на ограничението, например NOT NULL
възниква ограничение, REPLACE
оператор ще прекрати действието и ще върне транзакцията назад.
Следното илюстрира синтаксиса на REPLACE
изявление.
INSERT OR REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Или в кратка форма:
REPLACE INTO table(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
Нека да разгледаме някои примери за използване на SQLite REPLACE
изявление, за да разберете как работи.
SQLite REPLACE
примери за изрази
Първо създайте нова таблица с име positions
със следната структура.
CREATE TABLE IF NOT EXISTS positions (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
min_salary NUMERIC
);
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Второ, вмъкнете няколко реда в positions
таблица.
INSERT INTO positions (title, min_salary)
VALUES ('DBA', 120000),
('Developer', 100000),
('Architect', 150000);
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Трето, проверете вмъкването, като използвате следния SELECT
изявление.
SELECT * FROM positions;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Следното изявление създава уникален индекс на title
колона на positions
таблица, за да се гарантира, че няма дублирано заглавие на позиция:
CREATE UNIQUE INDEX idx_positions_title
ON positions (title);
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Да предположим, че искате да добавите позиция в positions
таблица, ако не съществува, в случай че позицията съществува, актуализирайте текущата.
Следният REPLACE
оператор вмъква нов ред в positions
таблица, защото заглавието на позицията Full Stack Developer
не е в positions
таблица.
REPLACE INTO positions (title, min_salary)
VALUES('Full Stack Developer', 140000);
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Можете да потвърдите REPLACE
операция с помощта на SELECT
изявление.
SELECT
id,title,min_salary
FROM
positions;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Вижте следното изявление.
REPLACE INTO positions (title, min_salary)
VALUES('DBA', 170000);
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Първо, SQLite провери UNIQUE
ограничение.
Второ, защото това изявление нарушава UNIQUE
ограничение, като се опитате да добавите DBA
заглавие, което вече съществува, SQLite изтри съществуващия ред.
Трето, SQLite вмъкна нов ред с данните, предоставени от REPLACE
изявление.
Забележете, че REPLACE
израз означава INSERT
или REPLACE
, а не INSERT
или UPDATE
.
Вижте следното изявление.
REPLACE INTO positions (id, min_salary)
VALUES(2, 110000);
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Това, което се опита да направи изявлението, е да актуализира min_salary
за позицията с идентификатор 2, която е разработчикът.
Първо, позицията с идентификатор 2 вече съществува, REPLACE
изявление го премахва.
След това SQLite се опита да вмъкне нов ред с две колони:( id
, min_salary
). Това обаче нарушава NOT NULL
ограничение на заглавната колона. Следователно SQLite връща обратно транзакцията.
Ако title
колоната няма NOT NULL
ограничение, REPLACE
оператор ще вмъкне нов ред, чиято заглавна колона е NULL
.
В този урок ви показахме как да използвате SQLite REPLACE
оператор за вмъкване или замяна на ред в таблица.