локальный файлПрактика, встроенные данные, небольшое локальное состояниеБазы данных: сначала изучите состояние, потом записывайте
База данных кажется страшнее файла потому, что состояние скрыто за драйвером. Лекарство то же: подключиться к контролируемой цели, посмотреть структуру, увидеть данные, сделать одно ограниченное изменение и проверить результат.
База данных — ещё одна форма структурированного состояния
Файл показывает исходный текст напрямую. База данных показывает состояние через движок: таблицы или коллекции, записи, индексы и запросы. Не начинайте с записи. Сначала уточните драйвер и выбранную базу, затем изучите уже существующую структуру.
Здесь работает тот же принцип, что и с конфигурацией: обращайтесь к логическому объекту — таблице, строке, ключу или документу, — а не к тому, как данные физически хранятся.
`db` даёт общий словарь, но драйвер всё равно важен
Общий слой — это удобный словарь, а не утверждение, что все базы одинаковы. SQL-таблицы, ключи Redis и документы MongoDB имеют разные модели данных и собственные возможности.
install md db sqlitedbdb sqlitesqliteSQLite — самое безопасное место для первого знакомства с базами данных
SQLite хранит базу в одном локальном файле, поэтому идеально подходит для одноразового упражнения. Создайте data/notes.sqlite, затем одной SQL-командой, специфичной для SQLite, создайте простую таблицу. После этого -t должен показать её.
Здесь нет сети и учётных данных. Практическую базу потом можно удалить как обычный файл, поэтому это гораздо спокойнее, чем начинать обучение с рабочей MySQL-базы.
cd lil-playgroundmd datasqlite -c data/notes.sqlite -fsqlite : CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY, title TEXT NOT NULL, status TEXT NOT NULL)sqlite -tСначала структура, затем предварительный просмотр строк
Сделайте этот порядок привычкой. Проверить поля до записи — для базы данных то же самое, что проверить путь назначения перед перемещением файла.
sqlite -s notessqlite -n notes 10Для точечных записей можно передавать JSON, а не собирать SQL вручную
Для обычной вставки или обновления драйвер принимает JSON-объект после :. Значения остаются отдельно от синтаксиса команды, и ради простой строки не нужно вручную заключать в кавычки целый SQL-запрос.
После каждой записи снова делайте предварительный просмотр или поиск. -a добавляет, -w обновляет совпавшие строки, -d существует для осознанного удаления. Короткая команда удаления не должна становиться рефлексом.
sqlite -a notes : {"title":"First terminal note","status":"draft"}sqlite -a notes : {"title":"Archive project","status":"done"}sqlite -n notes 10sqlite -w notes title "First terminal note" : {"status":"reviewed"}sqlite -f notes reviewed 20Собственный SQL базы нужен там, где общего интерфейса уже недостаточно
Группировка вроде SELECT status, COUNT(*) ... естественно выражается на SQL. Форма через : оставляет этот выход, не притворяясь, что компактные общие команды покрывают любую задачу базы данных.
Эта граница полезна: повседневные операции выполняйте короткими структурированными формами, а собственный язык базы используйте, когда задача действительно зависит от конкретной СУБД.
sqlite : SELECT status, COUNT(*) AS count FROM notes GROUP BY statusЭкспорт отвечает на вопрос о данных, дамп сохраняет более целое состояние
Экспорт таблицы notes в JSON даёт переносимые строки для других инструментов. dump сохраняет схему и данные для восстановления. Это связанные, но разные артефакты — называйте и храните их соответственно.
Резервное копирование не закончено, пока вы не посмотрели результат и не понимаете, как его восстановить. Позже обязательно попробуйте восстановление в отдельную одноразовую базу, а не впервые во время аварии.
sqlite -o notes -j data/notes.json -fsqlite dump data/notes.sql -fstat data/notes.sqlУдалённая база требует учётных данных, прав доступа и рабочей сети
Подключение MySQL/MariaDB или PostgreSQL добавляет имя хоста, пользователя, базу данных, сетевой адрес и скрытый запрос пароля. У Redis и MongoDB свои модели. Именно поэтому мы начали с SQLite: привычки работы с базой можно освоить отдельно от сложности подключения.
Не вставляйте реальные пароли в переносимые сценарии или публичные примеры. Учётные данные должны вводиться через скрытый запрос пароля или храниться в специально предусмотренном защищённом хранилище, а записи в рабочую базу начинайте только после проверки выбранной базы и целевых строк.
удалённый SQLТипичные веб-приложения и хостингудалённый SQLРеляционные приложения и более сложный SQLключи / значенияКеш и быстрое временное состояниедокументыДокументные данные приложенийdb mysqlmysql -c localhost app shoppostgresql -c localhost app shopСохраните это как сценарий
Сохраните это как database-checkpoint.lil. Сценарий открывает одноразовую SQLite-базу, гарантирует наличие тренировочной таблицы, показывает её и создаёт дамп. Он намеренно не автоматизирует прикладные записи: повторяемая автоматизация базы должна начинаться с проверок и резервной копии.
#lil
@install md sqlite
cd lil-playground
md data
sqlite -c data/notes.sqlite -f
sqlite : CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY, title TEXT NOT NULL, status TEXT NOT NULL)
sqlite -t
sqlite -n notes 10
sqlite dump data/notes.sql -f