Статья Автор: Деникина Н.В., Деникин А.В.

*Обработка конфликтов с помощью OR IGNORE и OR REPLACE

Обработка конфликтов с помощью 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' уже существует.

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать