Шаг 14 - Ввод, удаление и изменение данных в SQLite

Команды модификации данных

SQLite поддерживает три основные команды для работы с данными:

  1. INSERT - добавление новых записей

  2. UPDATE - изменение существующих записей

  3. DELETE - удаление записей

Добавление данных (INSERT)

Простая вставка:

INSERT INTO employees
VALUES (1703, 'Smith', 'John', 'x1234', 'john.smith@example.com', '1', 1002, 'Sales Rep');

Вставка с указанием столбцов:

INSERT INTO customers (customerNumber, customerName, contactLastName, contactFirstName, phone, addressLine1, city, country)
VALUES (497, 'New Customer', 'Ivanov', 'Petr', '+7 383 1234567', 'Lenina 1', 'Novosibirsk', 'Russia');

Вставка NULL-значений:

INSERT INTO customers (customerNumber, customerName, contactLastName, contactFirstName, phone, addressLine1, city, country, salesRepEmployeeNumber)
VALUES (498, 'Another Customer', 'Petrov', 'Ivan', '+7 383 7654321', 'Kirova 5', 'Novosibirsk', 'Russia', NULL);

Вставка данных из запроса:

INSERT INTO high_value_customers
SELECT customerNumber, customerName, creditLimit
FROM customers
WHERE creditLimit > 100000;

Удаление данных (DELETE)

Удаление всех записей (осторожно!):

DELETE FROM payments;

Удаление с условием:

DELETE FROM customers
WHERE customerNumber = 497;

Удаление с использованием подзапроса:

DELETE FROM orders
WHERE customerNumber IN (
    SELECT customerNumber
    FROM customers
    WHERE country = 'Russia'
);

Изменение данных (UPDATE)

Обновление всех записей:

UPDATE products
SET MSRP = MSRP * 1.1;  -- Увеличить цены на 10%

Обновление с условием:

UPDATE customers
SET creditLimit = 50000,
    salesRepEmployeeNumber = 1703
WHERE country = 'Russia';

Обновление с использованием подзапроса:

UPDATE products
SET quantityInStock = quantityInStock + 50
WHERE productCode IN (
    SELECT productCode
    FROM orderdetails
    GROUP BY productCode
    HAVING SUM(quantityOrdered) > 100
);

Важные особенности SQLite:

  1. Все операции DML (Data Manipulation Language) в SQLite поддерживают транзакции

  2. Для отмены изменений можно использовать ROLLBACK

  3. Для подтверждения изменений - COMMIT

  4. SQLite автоматически создает транзакцию для каждой команды, если явно не указана своя

Пример транзакции:

BEGIN TRANSACTION;

INSERT INTO orders (orderNumber, orderDate, requiredDate, status, customerNumber)
VALUES (10426, '2023-05-15', '2023-05-30', 'In Process', 112);

INSERT INTO orderdetails (orderNumber, productCode, quantityOrdered, priceEach, orderLineNumber)
VALUES (10426, 'S10_1949', 2, 98.58, 1);

COMMIT;

В следующих шагах мы рассмотрим: - Ограничения целостности данных (PRIMARY KEY, FOREIGN KEY) - Создание и изменение структуры таблиц - Представления (VIEWS) и другие объекты базы данных