Справочный гайд по командам SQLite
Основные команды по управлению базой данных SQLite. Управление базой данных, управление пользователями базы данных, управление таблицами, управление индексами, управление записями таблиц, связанные запросы, выгрузки данных во внешние источники, создание скриптов, загрузка данных из разных форматов
Categories:
Полное руководство по SQLite: от установки до продвинутого использования
Оглавление
- Введение в SQLite
- Установка SQLite
- Основы работы с SQLite
- Управление базами данных
- Работа с таблицами
- Типы данных
- CRUD-операции
- Индексы и оптимизация
- Транзакции
- Представления и триггеры
- Импорт и экспорт данных
- Интеграция с языками программирования
- Оптимизация производительности
- Резервное копирование
- Безопасность
Введение в SQLite
SQLite — это встраиваемая реляционная СУБД, которая:
- Не требует сервера (работает с файлами напрямую)
- Поддерживает стандартный SQL
- Имеет минимальные требования к ресурсам
- Используется в мобильных приложениях, браузерах и встроенных системах
Установка SQLite
Windows
- Скачать предварительно скомпилированные бинарники с официального сайта
- Добавить путь к sqlite3.exe в переменную PATH
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install sqlite3 libsqlite3-dev
MacOS
brew install sqlite
Проверка установки
sqlite3 --version
Основы работы с SQLite
Запуск интерфейса командной строки
sqlite3 mydatabase.db
Основные команды интерфейса
.help -- Показать все команды
.tables -- Показать список таблиц
.schema -- Показать структуру таблиц
.mode -- Изменить режим вывода (csv, column, json и др.)
.headers on -- Показать заголовки столбцов
.quit -- Выйти из интерфейса
Управление базами данных
Создание/открытие базы данных
sqlite3 database.db
Резервное копирование
-- В командной строке SQLite:
.output backup.sql
.dump
.output stdout
-- Или через командную строку ОС:
sqlite3 database.db .dump > backup.sql
Восстановление из резервной копии
sqlite3 newdatabase.db < backup.sql
Работа с таблицами
Создание таблицы
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
email TEXT NOT NULL UNIQUE,
age INTEGER,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
Изменение таблицы
-- Добавление столбца
ALTER TABLE users ADD COLUMN is_active INTEGER DEFAULT 1;
-- Удаление таблицы
DROP TABLE users;
Ограничения (Constraints)
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL CHECK(price > 0),
category_id INTEGER REFERENCES categories(id),
UNIQUE(name, category_id)
);
Типы данных в SQLite
SQLite использует динамическую типизацию. Основные типы:
NULL
- значение NULLINTEGER
- целое числоREAL
- число с плавающей точкойTEXT
- текстовая строкаBLOB
- бинарные данные
CRUD-операции
Вставка данных (Create)
INSERT INTO users (username, email, age)
VALUES ('john_doe', 'john@example.com', 30);
-- Множественная вставка
INSERT INTO users (username, email, age)
VALUES
('alice', 'alice@example.com', 25),
('bob', 'bob@example.com', 28);
Чтение данных (Read)
-- Простой запрос
SELECT * FROM users;
-- С условиями
SELECT username, email FROM users WHERE age > 25;
-- Сортировка
SELECT * FROM users ORDER BY age DESC;
-- Группировка
SELECT age, COUNT(*) FROM users GROUP BY age;
-- Ограничение вывода
SELECT * FROM users LIMIT 10 OFFSET 5;
Обновление данных (Update)
UPDATE users SET age = 31 WHERE username = 'john_doe';
Удаление данных (Delete)
DELETE FROM users WHERE id = 5;
Индексы и оптимизация
Создание индекса
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_age ON users(age);
Удаление индекса
DROP INDEX idx_users_email;
Анализ запросов
EXPLAIN QUERY PLAN SELECT * FROM users WHERE email = 'john@example.com';
Транзакции
Использование транзакций
BEGIN TRANSACTION;
INSERT INTO accounts (user_id, balance) VALUES (1, 1000);
UPDATE users SET last_transaction = CURRENT_TIMESTAMP WHERE id = 1;
COMMIT;
-- В случае ошибки:
ROLLBACK;
Представления и триггеры
Создание представления
CREATE VIEW active_users AS
SELECT * FROM users WHERE is_active = 1;
Создание триггера
CREATE TRIGGER update_timestamp
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
UPDATE users SET updated_at = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;
Импорт и экспорт данных
Импорт из CSV
.mode csv
.import data.csv tablename
Экспорт в CSV
.headers on
.mode csv
.output data.csv
SELECT * FROM tablename;
.output stdout
Импорт/экспорт JSON
-- Для работы с JSON требуется SQLite версии 3.38.0+
SELECT json_object('id', id, 'name', username) FROM users;
Интеграция с языками программирования
Python
import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
conn.close()
Node.js
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('database.db');
db.all("SELECT * FROM users", (err, rows) => {
console.log(rows);
});
db.close();
Оптимизация производительности
- Используйте транзакции для групповых операций
- Создавайте индексы для часто используемых полей
- Используйте
PRAGMA
команды для настройки:PRAGMA journal_mode = WAL; -- Режим записи журнала PRAGMA synchronous = NORMAL; -- Баланс между надежностью и скоростью PRAGMA cache_size = -2000; -- Размер кеша в KB
Резервное копирование
Полное резервное копирование
sqlite3 database.db ".backup backup.db"
Инкрементное резервное копирование
Используйте API SQLite для реализации инкрементного бэкапа в вашем приложении.
Безопасность
- Проверяйте входные данные перед выполнением SQL-запросов
- Используйте параметризованные запросы:
# Python пример cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
- Ограничивайте права доступа к файлу базы данных на уровне ОС
Заключение
SQLite — мощная и легковесная СУБД, идеально подходящая для:
- Мобильных приложений
- Встраиваемых систем
- Локальных приложений
- Тестирования и прототипирования
Для более сложных сценариев обратитесь к официальной документации.