Утилита sqlite3 и создание базы

Учимся работать с SQLite из терминала с помощью утилиты sqlite3.

sqlite3 — это маленькая консольная программа, которая открывает файл базы SQLite и позволяет выполнять SQL-запросы и служебные команды вручную.

Где взять sqlite3

Сама библиотека SQLite уже встроена во многие системы. Отдельная утилита командной строки sqlite3 ставится так:

# macOS (обычно уже есть; иначе через Homebrew)
brew install sqlite

# Debian / Ubuntu
sudo apt install sqlite3

# Windows: скачайте sqlite-tools с официального сайта sqlite.org
# и распакуйте sqlite3.exe в любую папку из PATH

Проверить, что всё установилось, можно командой sqlite3 --version — она напечатает номер версии.

Создаём базу — это просто файл

Чтобы создать или открыть базу, передайте утилите имя файла. Если файла нет, он будет создан (фактически — при первой записи данных).

sqlite3 shop.db

После этого вы попадаете в интерактивную оболочку с приглашением sqlite>. Здесь можно вводить SQL (он должен заканчиваться точкой с запятой ;) и особые «точечные» команды, которые начинаются с точки и управляют самой оболочкой.

Точечные команды (dot-команды)

Точечные команды — это не SQL, а инструкции самой утилите sqlite3. Самые полезные:

КомандаЧто делает
.tablesсписок таблиц в базе
.schemaпоказать SQL создания всех таблиц
.schema usersсхему конкретной таблицы
.headers onпечатать имена столбцов над результатом
.mode columnвыводить результат ровными колонками
.mode csvвыводить результат как CSV
.read file.sqlвыполнить SQL из файла
.quitвыйти из оболочки

Пример сессии в терминале

Создадим базу, таблицу и посмотрим на неё разными способами:

sqlite3 shop.db
sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
sqlite> INSERT INTO users (name) VALUES ('Аня'), ('Борис');
sqlite> .tables
sqlite> .schema users
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM users;
sqlite> .quit

По умолчанию sqlite3 печатает строки, разделяя столбцы вертикальной чертой. После .headers on и .mode column вывод последнего запроса станет аккуратной таблицей:

Вывод:

id  name
--  -----
1   Аня
2   Борис

Запуск SQL без входа в оболочку

Иногда удобно выполнить один запрос и сразу выйти. Для этого SQL передают прямо в команду:

# выполнить запрос и вернуться в терминал
sqlite3 shop.db "SELECT count(*) FROM users;"

# выполнить весь скрипт из файла
sqlite3 shop.db ".read seed.sql"

А полностью одноразовую базу в оперативной памяти (она исчезнет после выхода) открывают так: sqlite3 :memory:. Это любимый приём для тестов.

Итог

  • sqlite3 файл.db открывает или создаёт базу и пускает в интерактивную оболочку.
  • Точечные команды (.tables, .schema, .mode, .headers) управляют оболочкой, а не данными.
  • SQL можно выполнять и из оболочки, и одной строкой из терминала, и из файла через .read.
Проверьте себя
1. Что делает команда .schema в утилите sqlite3?
AУдаляет таблицу
BПоказывает SQL, которым создавались таблицы
CСоздаёт резервную копию
DМеняет тип столбца
2. Чем точечные команды (например, .tables) отличаются от SQL-запросов?
AЭто инструкции самой оболочке sqlite3, а не язык SQL
BЭто устаревший синтаксис SQL
CОни работают только в PostgreSQL
DЭто то же самое, что SELECT
3. Как открыть временную базу, которая исчезнет после выхода?
Asqlite3 temp.db
Bsqlite3 :memory:
Csqlite3 --temp
Dsqlite3 NULL
Поддержать проект