Back to: sqlite3 — бази даних
0
sqlite3 — базы данных
SQLite — лёгкая встроенная база данных, не требующая сервера. Идеальна для скриптов, небольших приложений и обучения SQL. Хранит всю базу в одном файле.
Установка и запуск
# Установка (если нет)
sudo apt install sqlite3
# Создать/открыть базу данных
sqlite3 test.db
# База в памяти (временная)
sqlite3 :memory:
# Выполнить команду и выйти
sqlite3 test.db ".tables"
Базовые команды sqlite3
# Внутри интерактивного режима sqlite3:
.tables # список таблиц
.schema # схема всех таблиц
.schema users # схема конкретной таблицы
.databases # список баз
.mode column # формат вывода колонками
.headers on # показать заголовки
.read script.sql # выполнить SQL из файла
.dump # дамп базы в SQL
.exit или .quit # выход
.help # справка
Создание таблиц (DDL)
-- Создание таблицы
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
age INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Создание таблицы с внешним ключом
CREATE TABLE orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
product TEXT NOT NULL,
amount REAL DEFAULT 0,
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- Удалить таблицу
DROP TABLE orders;
-- Добавить колонку
ALTER TABLE users ADD COLUMN phone TEXT;
Вставка данных (INSERT)
-- Вставка одной строки
INSERT INTO users (name, email, age)
VALUES ("Alice", "alice@example.com", 30);
-- Вставка нескольких строк
INSERT INTO users (name, email, age)
VALUES
("Bob", "bob@example.com", 25),
("Charlie", "charlie@example.com", 35),
("Dave", "dave@example.com", 28);
-- С указанием всех колонок
INSERT INTO users VALUES (NULL, "Eve", "eve@example.com", 22, NULL);
Запросы (SELECT)
-- Все строки
SELECT * FROM users;
-- Конкретные колонки
SELECT name, email FROM users;
-- С условием
SELECT * FROM users WHERE age >= 30;
SELECT * FROM users WHERE name = "Alice";
SELECT * FROM users WHERE age > 20 AND age < 35;
-- Сортировка
SELECT * FROM users ORDER BY age DESC;
SELECT * FROM users ORDER BY name ASC;
-- Ограничение количества
SELECT * FROM users LIMIT 5;
SELECT * FROM users LIMIT 5 OFFSET 10;
-- Подсчёт
SELECT COUNT(*) FROM users;
SELECT COUNT(*) FROM users WHERE age >= 30;
-- Уникальные значения
SELECT DISTINCT age FROM users;
Обновление (UPDATE)
-- Обновить запись
UPDATE users SET age = 31 WHERE name = "Alice";
-- Обновить несколько полей
UPDATE users SET age = 26, email = "bob_new@example.com" WHERE name = "Bob";
-- ⚠️ ВСЕГДА используйте WHERE!
-- Без WHERE обновятся ВСЕ строки!
Удаление (DELETE)
-- Удалить конкретную запись
DELETE FROM users WHERE name = "Dave";
-- Удалить по условию
DELETE FROM users WHERE age < 25;
-- Удалить все записи (ОСТОРОЖНО!)
DELETE FROM users;
JOIN — объединение таблиц
-- INNER JOIN
SELECT users.name, orders.product, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;
-- LEFT JOIN (все пользователи, даже без заказов)
SELECT users.name, orders.product
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
-- С агрегацией
SELECT users.name, COUNT(orders.id) as order_count
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.id;
Выполнение SQL из файла
# Создать файл queries.sql
echo "SELECT * FROM users;" > queries.sql
# Выполнить
sqlite3 test.db < queries.sql
# Или внутри sqlite3:
.read queries.sql
Экспорт и импорт
# Экспорт в SQL-формат (дамп)
sqlite3 test.db .dump > backup.sql
# Импорт из дампа
sqlite3 new.db < backup.sql
# Экспорт в CSV
sqlite3 test.db ".mode csv" ".headers on" ".output users.csv" "SELECT * FROM users;"
# Импорт из CSV
sqlite3 test.db ".mode csv" ".import data.csv users"
Практическое задание
- Создайте базу:
sqlite3 shop.db - Создайте таблицу users:
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT); - Вставьте 3 записи:
INSERT INTO users VALUES (1, "Alice", "alice@mail.com"); - Проверьте:
SELECT * FROM users; - Обновите:
UPDATE users SET name = "Bob" WHERE id = 1; - Удалите:
DELETE FROM users WHERE id = 3; - Включите красивый вывод:
.mode columnи.headers on - Сделайте дамп:
.dump


Добавить комментарий