Шаг 14 - Ввод, удаление и изменение данных в SQLite
Команды модификации данных
SQLite поддерживает три основные команды для работы с данными:
INSERT- добавление новых записейUPDATE- изменение существующих записей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:
Все операции DML (Data Manipulation Language) в SQLite поддерживают транзакции
Для отмены изменений можно использовать
ROLLBACKДля подтверждения изменений -
COMMITSQLite автоматически создает транзакцию для каждой команды, если явно не указана своя
Пример транзакции:
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) и другие объекты базы данных