Обработка конфликтов с помощью OR IGNORE и OR REPLACE: В SQL можно обработать конфликты уникальности с помощью OR IGNORE
и OR REPLACE
. Эти ключевые слова позволяют контролировать, что произойдёт, если возникает конфликт уникальности.
-
OR IGNORE: если происходит конфликт (например, повторяющееся значение для PRIMARY KEY
), строка просто игнорируется, и вставка продолжается для остальных строк.
INSERT OR IGNORE INTO products (product_id, product_name, price, category) VALUES
(1, 'Laptop', 999.99, 'Electronics'),
(5, 'Tablet', 399.99, 'Electronics');
В этом случае, если product_id = 1
уже существует, строка с этим product_id
не будет добавлена, но вставка для строки с product_id = 5
продолжится.
-
OR REPLACE: если возникает конфликт, строка с конфликтующим значением удаляется, а новая вставляется на её место.
INSERT OR REPLACE INTO products (product_id, product_name, price, category) VALUES
(1, 'High-End Laptop', 1499.99, 'Electronics');
Если строка с product_id = 1
уже существует, она будет заменена новой строкой с тем же product_id
.
Пример: Вставка нескольких строк с уникальными значениями
Рассмотрим таблицу users
:
CREATE TABLE users (
user_id INTEGER PRIMARY KEY,
username TEXT UNIQUE,
email TEXT UNIQUE
);
Мы хотим добавить несколько пользователей, но некоторые из них могут иметь одинаковые username
или email
, что нарушит уникальность. Чтобы избежать ошибок, мы можем использовать INSERT OR IGNORE
или INSERT OR REPLACE
.
INSERT OR IGNORE INTO users (user_id, username, email) VALUES
(1, 'alice', '[email protected]'),
(2, 'bob', '[email protected]'),
(3, 'alice', '[email protected]'), -- Будет проигнорировано из-за уникального username
(4, 'charlie', '[email protected]');
В этом случае строка с username = 'alice'
и email = '[email protected]'
не будет добавлена, так как username = 'alice'
уже существует.