SQLiteStudio — это бесплатная программа с графическим интерфейсом для работы с SQLite-базами данных. Она позволяет создавать и открывать файлы БД, выполнять SQL-запросы, просматривать таблицы и данные в них.
Скачайте актуальную версию с официального сайта: sqlitestudio.pl
Программа не требует установки — достаточно распаковать архив и запустить исполняемый файл SQLiteStudio (Windows: SQLiteStudio.exe).
После запуска вы увидите три основные области:
┌─────────────────┬──────────────────────────────────────────┐
│ │ │
│ Панель баз │ Редактор SQL │
│ данных │ │
│ │ │
│ - shop.db ├──────────────────────────────────────────┤
│ ├ categories │ │
│ ├ products │ Результаты запроса │
│ ├ users │ │
│ └ ... │ │
└─────────────────┴──────────────────────────────────────────┘
- Панель баз данных (слева) — список подключённых БД и их таблиц
- Редактор SQL (справа сверху) — место для написания и выполнения запросов
- Панель результатов (справа снизу) — вывод результатов запроса
Файл базы данных SQLite — это обычный файл на диске с расширением .db или .sqlite3. Вся база данных хранится в этом одном файле.
- В меню выберите Database → Add a database
- В открывшемся окне нажмите иконку папки рядом с полем "File"
- Выберите папку для проекта и введите имя файла:
shop.db - Нажмите OK
В панели баз данных появится shop.db. База данных создана — пока она пустая.
Важно: файл
shop.dbсоздаётся прямо на диске в той папке, которую вы выбрали. Его можно скопировать, перенести, отправить коллеге — это просто файл.
Прежде чем запускать готовые данные, напишем первую таблицу вручную. Это важно — нужно понять синтаксис CREATE TABLE своими руками.
CREATE TABLE имя_таблицы (
имя_столбца ТИП [ограничения],
имя_столбца ТИП [ограничения],
...
);SQLite поддерживает четыре основных типа:
| Тип | Для чего | Пример значения |
|---|---|---|
INTEGER |
Целые числа | 1, 42, -7 |
REAL |
Числа с плавающей точкой | 3.14, 75000.00 |
TEXT |
Строки любой длины | 'Москва', 'alice@mail.ru' |
BLOB |
Бинарные данные (файлы, изображения) | x'89504e47' |
SQLite — гибкая система. Типы данных в ней носят рекомендательный характер: в столбец
INTEGERтехнически можно записать текст. Но мы будем работать с типами правильно — это важная привычка перед переходом на PostgreSQL, где типизация строгая.
Каждая таблица должна иметь первичный ключ — уникальный идентификатор строки.
id INTEGER PRIMARY KEY AUTOINCREMENTPRIMARY KEY— объявляет столбец первичным ключом. SQLite гарантирует уникальность.AUTOINCREMENT— значение генерируется автоматически: 1, 2, 3... При вставке новой строки указыватьidне нужно.
Напишем таблицу для хранения категорий товаров. Откройте редактор SQL в SQLiteStudio (убедитесь что выбрана ваша БД shop.db) и выполните:
CREATE TABLE categories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
);Нажмите F9 или кнопку "Execute" для выполнения. В панели слева в разделе shop.db появится таблица categories.
Что здесь происходит:
id INTEGER PRIMARY KEY AUTOINCREMENT— уникальный числовой идентификатор, заполняется автоматическиname TEXT NOT NULL— название категории, текстовое, обязательное для заполнения (NOT NULLозначает "не может быть пустым")
Добавим несколько строк вручную чтобы убедиться что таблица работает:
INSERT INTO categories (name) VALUES ('Электроника');
INSERT INTO categories (name) VALUES ('Книги');Теперь выполним запрос чтобы посмотреть на результат:
SELECT * FROM categories;Вы увидите:
┌────┬─────────────┐
│ id │ name │
├────┼─────────────┤
│ 1 │ Электроника │
│ 2 │ Книги │
└────┴─────────────┘
id заполнился автоматически — 1 и 2. При следующей вставке будет 3.
Перед тем как запустить полный seed-файл, нужно удалить тестовую таблицу categories — в seed.sql она будет создана заново с правильной структурой.
DROP TABLE categories;DROP TABLE удаляет таблицу полностью вместе со всеми данными. Команда необратима — отмены нет. В реальной разработке эту команду используют с осторожностью.
Файл seed.sql — это набор SQL-команд, которые создают все таблицы курса и заполняют их данными. Запускать его каждый раз заново не придётся — только один раз в начале.
Файл содержит:
DROP TABLE IF EXISTS— удаление таблиц если они уже существуют (для безопасного повторного запуска)CREATE TABLEдля каждой из пяти таблицINSERT INTOс данными: категории, товары, пользователи, заказы, позиции заказов
- В меню SQLiteStudio выберите Tools → Execute SQL from file
- Выберите файл
seed.sql - Убедитесь что в выпадающем списке выбрана ваша БД
shop.db - Нажмите OK
В панели слева появятся пять таблиц: categories, products, users, orders, order_items.
Выполните несколько запросов чтобы убедиться что данные на месте:
SELECT * FROM categories;┌────┬─────────────┐
│ id │ name │
├────┼─────────────┤
│ 1 │ Электроника │
│ 2 │ Периферия │
│ 3 │ Мебель │
│ 4 │ Книги │
│ 5 │ Одежда │
└────┴─────────────┘
SELECT * FROM products;SELECT * FROM users;Теперь посмотрим на схему целиком — пять таблиц со связями между ними:
categories products
┌──────────────┐ ┌──────────────────────┐
│ id INT │◄─────────│ category_id INT │
│ name TEXT │ │ id INT (PK)│
└──────────────┘ │ name TEXT │
│ price REAL │
│ stock INT │
└──────────────────────┘
users orders
┌──────────────────┐ ┌──────────────────────┐
│ id INT (PK) │◄─────│ user_id INT │
│ name TEXT │ │ id INT (PK) │
│ email TEXT │ │ status TEXT │
│ city TEXT │ │ created_at TEXT │
│ created_at TEXT │ └──────────┬───────────┘
└──────────────────┘ │
│
order_items│
┌──────────▼───────────┐
│ id INT (PK) │
│ order_id INT │
│ product_id INT │
│ quantity INT │
│ price_at_time REAL │
└──────────────────────┘
Что здесь важно понять уже сейчас:
- У каждой таблицы есть
id— первичный ключ - Таблицы связаны через числовые идентификаторы:
orders.user_idуказывает наusers.id order_itemsсвязана сразу с двумя таблицами: она знает к какому заказу относится и какой товар содержит- Данные о цене товара в момент покупки хранятся в
price_at_time— потому что цена товара вproductsможет измениться, а история заказа должна оставаться точной
С этой базой данных мы будем работать во всех последующих уроках модуля.
- Что представляет собой файл базы данных SQLite физически?
- Для чего используется ключевое слово
AUTOINCREMENTпри объявлении первичного ключа? - Какой тип данных SQLite подходит для хранения цены товара? Почему не
INTEGER? - Что произойдёт если выполнить
DROP TABLE categoriesкогда в таблице есть данные? - Зачем в начале
seed.sqlстоят командыDROP TABLE IF EXISTS? - Почему в таблице
order_itemsесть столбецprice_at_time, если цена товара уже есть в таблицеproducts? - Какой тип данных SQLite использовать для хранения электронной почты пользователя?
- Чем
seed.sqlотличается от файла базы данныхshop.db? - Посмотрите на схему БД. Как таблица
order_items"знает" к какому заказу и к какому товару относится каждая строка? - Нужно сохранить в БД аватар пользователя в виде бинарных данных. Какой тип данных SQLite для этого подходит?
Напишите команду CREATE TABLE для таблицы reviews (отзывы о товарах). Таблица должна содержать: уникальный идентификатор, идентификатор товара (целое число), текст отзыва, рейтинг (целое число от 1 до 5), дату публикации (текст).
Напишите команду для создания таблицы employees (сотрудники) со столбцами: id, full_name (текст, обязательный), position (должность, текст, обязательный), salary (зарплата, число с плавающей точкой), hire_date (дата найма, текст).
Создайте таблицу cities с полями id и name. Добавьте в неё три города на ваш выбор с помощью INSERT INTO. Затем выполните SELECT * FROM cities и убедитесь что данные добавились корректно.
Результат:
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 1 │ Москва │
│ 2 │ Казань │
│ 3 │ Сочи │
└────┴────────┘
Напишите команду CREATE TABLE для таблицы blog_posts (статьи блога): идентификатор, заголовок (текст, обязательный), содержимое статьи (текст), количество просмотров (целое число, по умолчанию 0), дата публикации (текст). Значение по умолчанию: DEFAULT 0 для views — новая статья начинает с нуля просмотров автоматически, без явного указания при вставке.
Используя данные из seed.sql, выполните три отдельных запроса SELECT * FROM ... для таблиц users, orders и order_items. Посчитайте: сколько строк в каждой таблице? Для подсчета нужно использовать функцию COUNT(). Эта функция будет подробно рассмотрена в Уроке 5.
Создайте таблицу sessions для хранения пользовательских сессий: id, user_id (целое, обязательное), token (текст, обязательный), created_at (текст), expires_at (текст). После создания — удалите её с помощью DROP TABLE.