Модуль: Вставка данных


3. *Обработка конфликтов с помощью 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', 'alice@example.com'),
    (2, 'bob', 'bob@example.com'),
    (3, 'alice', 'alice.duplicate@example.com'), -- Будет проигнорировано из-за уникального username
    (4, 'charlie', 'charlie@example.com'); 

В этом случае строка с username = 'alice' и email = 'alice.duplicate@example.com' не будет добавлена, так как username = 'alice' уже существует.

time 1000 ms
memory 256 Mb

Комментарий учителя