Перейти до вмісту

SQLite

Матеріал з K2 ERP Wiki
Версія від 18:37, 14 травня 2026, створена R (обговорення | внесок) (Створена сторінка: {{SEO |title=SQLite — вбудована база даних, SQL, файлова БД, транзакції, індекси, ORM і ERP |description=SQLite: що це таке, як працює вбудована файлова база даних, таблиці, SQL-запити, транзакції, індекси, JOIN, обмеження, WAL, приклади для мобільних застосунків, ERP, CRM, Service Desk, K2 ERP, ан...)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)


target_count INTEGER,

UNIQUE забороняє дублікати.; supplier_sku TEXT,

  • не втрачати файл після перезапуску контейнера;
  • використовувати volume;
  • контролювати резервні копії;
  • не запускати багато контейнерів, які одночасно пишуть в один файл;
  • розуміти обмеження файлової бази.; Що означає

|- | customers | Контрагенти | id, edrpou, name |- | products | Номенклатура | id, sku, name |- | orders | Замовлення | id, external_order_id, customer_id |- | migration_errors | Помилки міграції | object_type, object_id, error_message |}

Поверне товари від найдорожчого до найдешевшого.;== SQLite і аудит дій ==

Для важливих даних потрібно мати регулярні резервні копії.; status TEXT,

SQLite-файл зазвичай не дуже зручний для зберігання в Git, якщо він часто змінюється.; Приклад

SQLite і продуктивність

SELECT * conn = sqlite3.connect("company.db")

CREATE TABLE control_totals (

WHERE supplier_sku IS NULL OR supplier_sku = ;

ON orders (external_order_id);

GROUP BY групує інформаційні дані для підсумків.;

організація хоче запустити основну ERP для 300 користувачів:

Power BI має змогу працювати з даними, які були підготовлені в SQLite, через проміжні інструменти або драйвери.; Приклад:
як ілюстрація:

!; Для чутливих даних потрібні файлові права, шифрування, захист пристрою й контроль резервних копій.; error_message

WAL-режим має змогу покращити роботу при одночасному читанні й записі.; !;== SQL-запити в SQLite ==

<div style="border:3px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;">
Це полегшує сортування й фільтрацію.; SQLite
.tables
== SQLite і PHP ==

== SQLite і K2 ERP ==

У такій таблиці можна зберігати номенклатуру:

* артикул;
* номер документа;
* дата;
* замовник;
* договір;
* статус;
* зовнішній ID;
* складський облік;
* організація;
* email;
* телефон.;== SQLite і документація схеми ==

== INSERT ==


== Зовнішній ключ ==
'''Практичний приклад.''' Якщо потрібно зробити локальну утиліту для вивантаження даних з BAS, 1С або старої ERP, SQLite має змогу зберігати проміжні таблиці: номенклатуру, контрагентів, договори, залишки, помилки імпорту й контрольні суми перед завантаженням у K2 ERP.; INSERT INTO products (sku, name, unit, price)

FROM customers;

== GROUP BY ==

SQLite зберігає локально:
== WAL-режим SQLite ==
SELECT id, name, email
'''CHECK''' перевіряє значення.; GROUP BY edrpou

== CHECK ==

Вона робить:

* обсяг даних;
* кількість користувачів;
* частоту запису;
* потребу в одночасному доступі;
* чутливість даних;
* резервне копіювання;
* структуру таблиць;
* індекси;
* транзакції;
* міграції структури;
* спосіб логування;
* правила очищення;
* сценарій переходу на серверну СУБД, якщо проєкт виросте.; {| class="wikitable" style="width:100%;"

== SQLite і SQL-ін’єкції ==

Приклад:

Приклад:

 source_count INTEGER,

!; created_at TEXT NOT NULL

== Приклад таблиці зі зовнішнім ID ==

Під час міграції SQLite можна використовувати для контрольних сум.;== SQLite як файлова база даних ==

SQLite і перехід на серверну СУБД

);

як ілюстрація, агент обміну між сайтом і ERP має змогу зберігати:

object_id TEXT,

Поле ''id'' є собою унікальним і надає можливість точно знайти замовлення.;

Основні команди:

; object_name

Приклад фільтрації за датою

  • застосунком;
  • операційною системою;
  • файловими правами;
  • шифруванням;
  • логікою API;
  • окремим серверним шаром;
  • політиками доступу до пристрою.; Приклад:

CREATE VIEW active_customers AS Так.; * список товарів;

  • штрихкоди;
  • комірки;
  • задача на відбір;
  • фактичні сканування;
  • помилки;
  • статус синхронізації.; !;
Під час міграції потрібно завантажити контрагента, договори й відкриті залишки.; !; SELECT edrpou, COUNT(*) AS cnt Параметризовані запити зменшують ризик SQL-ін’єкцій.; active '''SELECT''' застосовують, коли потрібно для читання даних.; message Параметр ''?'' сприяє безпечніше передавати значення в запит.; Для міграції краще мати окремі групи таблиць: == SQLite у мобільних застосунках == SQLite не має такої серверної моделі користувачів і ролей, як корпоративні СУБД.; * не ідеальна для багатьох одночасних записів; * немає повноцінної серверної моделі користувачів; * не найкращий вибір для великої ERP; * обмежені функціональні можливості адміністрування порівняно із серверними СУБД; * потрібно уважно працювати з файлами; * ризик блокувань; * не варто зберігати чутливі інформаційні дані без захисту; * не всі функціональні можливості SQL такі самі, як у великих СУБД.; SQLite підтримує роботу стандартні SQL-операції.; unit TEXT NOT NULL, == UPDATE == BEGIN <pre> !; !;

Коли інтернет з’являється, застосунок передає інформаційні дані в ERP.; object_type TEXT,

; Таблиця
  • чергу повідомлень;
  • зовнішні ID;
  • статуси відправки;
  • помилки;
  • повторні спроби;
  • час останньої синхронізації;
  • кеш довідників;
  • контрольні суми.; created_at

Чи безпечна SQLite для конфіденційних даних?

NULL означає відсутність значення.; | У локальних модулях, мобільному офлайні, агентах інтеграції, кешах, тестах і проміжних базах міграції.;
У десктопних програмах SQLite зручна для:

Але для великого вебсайту з багатьма одночасними записами частіше обирають серверну СУБД.; істотно:

 id INTEGER PRIMARY KEY,

* багато користувачів одночасно активно пишуть у базу;
* потрібна велика серверна ERP;
* потрібна складна платформа прав на рівні СУБД;
* потрібна реплікація між серверами;
* потрібне горизонтальне масштабування;
* база має дуже велике навантаження на запис;
* потрібні складні серверні процедури;
* потрібна централізована корпоративна СУБД;
* інформаційні дані мають оброблятися багатьма сервісами одночасно.; ORM надає можливість працювати з таблицями SQLite як із моделями.; Комірник функціонує з планшетом у зоні слабкого інтернету.; INSERT INTO customers (name, email, phone)
== SQLite у навчанні SQL ==
SQLite не завжди підходить як головна база ERP, але має змогу бути корисною в ERP-екосистемі.;== SQLite і параметризовані запити ==

Для підтримки істотно документувати:

Поганий підхід:

'''Зовнішній ключ''' зв’язує одну таблицю з іншою.;[[Категорія:Бази даних]]
EXPLAIN QUERY PLAN
);
[[Категорія:API]]

Можна вивчати:

CREATE TABLE customers (

; Що зберігає На відміну від серверних СУБД, таких як PostgreSQL, MySQL або Microsoft SQL Server, SQLite функціонує як бібліотека всередині застосунку.;

JOIN customers ON customers.id = orders.customer_id;

  • зберігати суму в копійках як INTEGER;
  • використовувати округлення;
  • контролювати точність у застосунку;
  • не використовувати SQLite як центральний фінансовий контур великої ERP без продуманої моделі.; # Завантажити дебіторку.; * raw_* — сирі інформаційні дані з джерела;
  • clean_* — очищені інформаційні дані;
  • map_* — таблиці відповідності;
  • err_* — помилки;
  • log_* — журнали;
  • ctl_* — контрольні суми;
  • export_* — фінальні інформаційні дані для завантаження.; | Вбудована реляційна база даних, яка зберігає інформаційні дані в одному файлі.; VACUUM;
  • підготовки вивантажень;
  • зберігання локальних агрегатів;
  • контрольних сум;
  • тимчасових таблиць;
  • невеликих аналітичних наборів;
  • перевірки якості даних.; level TEXT NOT NULL,

Для такого сценарію краще використовувати серверну СУБД, а SQLite залишити для локальних кешів, агентів або допоміжних інструментів.; status

Коротко

Для чого потрібна SQLite

Приклад індексів для інтеграції

UPDATE products

ACID у SQLite

ROLLBACK;

SQL-ін’єкція — це атака, коли користувач системи вводить текст, який змінює SQL-запит.; id

SELECT edrpou, COUNT(*) AS cnt Основні недоліки:

Що підготувати перед використанням SQLite у проєкті

customer.save() SQLite зберігає:

FROM active_customers;

Краще:

SQLite і безпека

GROUP BY customer_id;

  • інший бізнес-процес пише в базу;
  • довга транзакція;
  • файл відкритий кількома програмами;
  • не закрито підключення;
  • антивірус або синхронізація файлів блокує файл;
  • база лежить у проблемному мережевому каталозі.;== UNIQUE ==
; object_type

import sqlite3 Сценарії:

Це допоможе не створити дублікат одного й того самого замовлення.; * проста установка;

  • один файл бази;
  • не потрібен сервер;
  • супровід SQL;
  • транзакції;
  • хороша швидкість для локальних задач;
  • зручність для тестів;
  • зручність для мобільних застосунків;
  • зручність для міграційних утиліт;
  • переносимість;
  • мінімальне адміністрування.; Таблиця
; SQLite функціонує як вбудована файлова база без окремого сервера.; !; !; WAL — це Write-Ahead Logging, режим журналювання, який має змогу покращити паралельне читання й запис у певних сценаріях.; migration.db-wal

Приклад: SQLite добре функціонує з багатьма читачами, але має обмеження для багатьох одночасних записів.; реліз

CREATE TABLE customers (

id INTEGER PRIMARY KEY,
  • імпорт прайсів;
  • перевірка довідників;
  • формування файлів міграції;
  • локальний довідник контрагентів;
  • логування API;
  • синхронізація складу;
  • підготовка контрольних сум.; Ключові поля
id INTEGER PRIMARY KEY,
retry_count INTEGER DEFAULT 0, sku TEXT NOT NULL,

 product_name TEXT,
SELECT *
== SQLite і ERP ==
sqlite3 company.db
|-
| ORD-000145
| 2026-05-15
| ТОВ “замовник Плюс”
|-
| ORD-000146
| 2026-05-16
| ФОП Іваненко
|}

<pre>

);

<pre>

message TEXT NOT NULL,

Приклади: Головне. SQLite — це база даних “в одному файлі”.; SQLite зручна для очищення даних перед міграцією.; Поширені помилки:

cursor = conn.cursor()

WHERE active = 1;

є собою файл: conn.close() SQLite дуже часто застосовується в мобільних застосунках.;== Приклад транзакції в міграції ==

SQLite — це легка база даних, яка зберігає всі таблиці й записи в одному файлі та не потребує окремого сервера.; user_id

Приклад процесу:

; Ризик

UPDATE змінює існуючий запис.; Погано:

FOREIGN KEY (customer_id) REFERENCES customers(id)

SET active = 0


<pre>

FROM sales

# Створити контрагента.; # Завантажує Excel-файл.; SQLite має змогу зберігати JSON як текст і в багатьох сценаріях працювати з JSON-даними.; |-
| Для чого потрібна?; * SQL-міграції;
* схему бази;
* тестові seed-дані;
* документацію;
* скрипти створення.; # Зберігає інформаційні дані у SQLite.;== SELECT ==
Приклад:

!; Що містить

!;== SQLite і CLI ==

[[Категорія:Power BI]]

SQLite часто використовують для обробки CSV-файлів.; Питання
[[Категорія:Вивантаження даних]]

!; level
|-
| 1
| USB-C-1M-BLK
| Кабель USB-C 1 м чорний
| шт.;== SQLite і права доступу ==
Іноді можна отримати помилку, що база заблокована.; * профіль користувача;
* кеш товарів;
* історичний розвиток замовлень;
* офлайн-документи;
* черга синхронізації;
* конфігурація;
* повідомлення;
* локальні довідники;
* інформаційні дані для роботи без інтернету.; SQLite зручна як проміжна база для очищення даних, мапінгу, логів помилок, контрольних сум і підготовки файлів для завантаження в ERP.;

Приклад:

SQLite і очищення даних

CREATE TABLE migration_errors (

  • NULL;
  • порожній рядок ;
  • 0;
  • false.; це легка вбудована реляційна база даних.; Причини:

Можна шукати:

SQLite і Docker

error_message TEXT NOT NULL,

FROM customers

  • дублікати;
  • порожні поля;
  • некоректні email;
  • товари без артикулів;
  • контрагентів без ЄДРПОУ;
  • договори без валюти;
  • документи без дати;
  • залишки без складу;
  • платежі без контрагента.; # Перевірити артикулі.; # Записати контрольну суму.; замовник

SELECT *

У бізнес-системах часто краще не видаляти фізично, а використовувати ознаку активності:

  • використовувати параметризовані запити;
  • не склеювати SQL із введенням користувача;
  • перевіряти інформаційні дані;
  • обмежувати доступ до файлу бази;
  • логувати помилки;
  • не зберігати секрети у відкритому вигляді.; Приклад

)

ANALYZE; {{SEO

SQLite і імпорт CSV

View або представлення — це збережений запит.; {| class="wikitable" style="width:100%;" UPDATE products

SQLite для міграції даних

SQLite і Python

Приклад:

;

Приклад:

Приклад:

Типові обмеження:
[[Категорія:ORM]]
'''ORDER BY''' сортує результат.; Відповідь

А сам файл бази часто додають у .gitignore.; object_type TEXT NOT NULL, Приклад: У коді можна створити клієнта:

SQLite і шифрування

SQLite-файл потрібно захищати так само, як інші інформаційні дані.; object_type

  • SELECT;
  • INSERT;
  • UPDATE;
  • DELETE;
  • CREATE TABLE;
  • ALTER TABLE;
  • DROP TABLE;
  • CREATE INDEX;
  • JOIN;
  • GROUP BY;
  • ORDER BY.; CREATE TABLE audit_log (

У цьому випадку SQLite зручна, бо не потрібно розгортати сервер бази даних.; # Знайти дублікати.; SQLite підтримує роботу SQL-запити: SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY, індекси, транзакції, обмеження, представлення й тригери.;== Приклад: де SQLite недоречна ==


query = "SELECT * FROM customers WHERE name = '" + name + "'"

Тригери корисні, але їх потрібно документувати, бо прихована логіка має змогу ускладнювати підтримку.; action

Окремо варто відзначити яка зберігає всі інформаційні дані в одному файлі і не потребує окремого серверного процесу виступає ключовою рисою SQLite.; id INTEGER PRIMARY KEY, як ілюстрація, замовлення належить клієнту:

Приклад офлайн-продажів

У Node.js SQLite має змогу використовуватися для локальних застосунків, CLI-утиліт, Electron-додатків або тестів.; | Проста файлова база для надійного локального зберігання даних без складного адміністрування.; Приклад:

email TEXT,

Такий запит поверне замовлення за травень 2026 року.; Тип

object_name TEXT NOT NULL,

Типові помилки при міграції через SQLite

action TEXT NOT NULL,

Типові сценарії:

SQLite можна використовувати для локальної аналітики над файлами.; # Створити договори.;== Приклад зв’язку клієнтів і замовлень ==

Python має вбудовану підтримку SQLite через компонент sqlite3.;<pre>
<pre>
Після цього пошук товару за артикулом буде швидшим:

FROM customers

cursor.execute("SELECT * FROM customers WHERE name = ?", (name,))

як ілюстрація: Далі можна виконувати SQL-команди:

!; * база не застосовується;
* транзакції завершені;
* застосовується штатний механізм backup;
* файл не копіюється під час активного запису.; Це означає, що ''customer_id'' у замовленні має відповідати існуючому клієнту.; !; BEGIN TRANSACTION;
Приклад таблиці логів:
=== Який результат правильного використання SQLite? ===
Це сприяє зв’язувати локальні записи з ERP, сайтом, CRM або API.; company.db

== Приклад таблиці імпорту прайсу ==

== SQLite і інтеграції ==

name TEXT NOT NULL,

cursor.execute("INSERT INTO customers (name) VALUES (?)", ("ТОВ Альфа",)) Але потрібно пам’ятати: поведінка SQLite має змогу відрізнятися від PostgreSQL або MySQL, з цієї причини критичні SQL-запити треба перевіряти на цільовій СУБД.; Це істотно для цілісності даних.; status TEXT DEFAULT 'new',

migration.db-shm

WHERE sku = 'USB-C-1M-BLK';

ALTER TABLE orders

Результат:

SQLite і ANALYZE

UPDATE supplier_balances

Для інтеграцій SQLite часто зберігає зовнішні ідентифікатори.; У цьому режимі SQLite використовує додатковий журнал записів.; phone TEXT


тимчасового збереження вивантажених довідників забезпечується через У контексті K2 ERP, інтеграцій, міграції даних або локальних агентів SQLite має змогу використовуватися як проміжне сховище:; додатково реалізовано логів інтеграцій, контрольних сум, черг обміну, кешу API, локальних налаштувань, даних для тестування або невеликого автономного модуля.; CREATE TRIGGER log_product_price_update

Приклад:

; price
  • new;
  • processing;
  • sent;
  • error;
  • skipped.; !; INSERT INTO payments (amount, currency, payment_date)

); Оскільки SQLite — файлова база, резервну копію можна зробити копіюванням файлу.; | Обмеження одночасного запису, відсутність серверної моделі прав, ризик копіювання файлу й неправильне використання у великих системах.; # Сформувати файл актуалізація для ERP.; SQLite зберігає всю базу в одному файлі.; # Порахувати зміни цін.; | Ні, SQLite функціонує без окремого серверного процесу.; Це має змогу допомогти SQLite краще планувати виконання запитів.; Варіант

SQLite має змогу працювати з досить великими файлами, але практично її частіше використовують для локальних і помірних обсягів.; WHERE id = 10;

Але VACUUM має змогу займати час, з цієї причини його не варто запускати бездумно в активній системі.;

{
Тригер — це дія, яка автономно виконується при INSERT, UPDATE або DELETE.; Номер замовлення

== Таблиці SQLite ==
; SQLite не є собою найкращим вибором, якщо:

SQLite і дати


* таблиці;
* SQL-запити;
* індекси;
* первинні ключі;
* зовнішні ключі;
* транзакції;
* представлення;
* тригери;
* JOIN;
* агрегатні функції;
* підзапити;
* обмеження;
* WAL-режим;
* тимчасові таблиці;
* вбудовані функції.; Таблиця

FROM products
== SQLite і грошові суми ==
FROM customers
=== Що таке SQLite простими словами? ===

{| class="wikitable" style="width:100%;"

 external_order_id TEXT UNIQUE,
FROM customers
 name TEXT NOT NULL,
|-
| 001
| Створено таблицю customers
|-
| 002
| Додано таблицю orders
|-
| 003
| Додано status до orders
|-
| 004
| Додано індекс external_order_id
|}

!;== Пов’язані сторінки ==

== SQLite і контрольні суми ==

== SQLite і помилки блокування ==

* продажі та реалізація;
* закупівельна діяльність;
* складський облік;
* виробництво;
* фінансовий блок;
* зарплата;
* банк;
* каса;
* Power BI;
* API;
* інтеграції;
* аудит дій.; !; sku
== SQLite для тестування ==
|-
| Зберігати файл у BLOB
| Усе в одній базі
| База оперативно росте
|-
| Зберігати файл окремо
| Легше керувати файлами
| Потрібно контролювати шляхи
|}

Операції:

SQLite краще використовувати на локальному диску.; object_id

* паролі;
* API-ключі;
* банківські реквізити;
* зарплатні інформаційні дані;
* персональні інформаційні дані;
* комерційні прайси;
* конфіденційні договори;
* токени доступу;
* фінансові звіти.; Без додаткових заходів його можна скопіювати.; source_count

* NOT NULL;
* UNIQUE;
* CHECK;
* PRIMARY KEY;
* FOREIGN KEY;
* DEFAULT.;== Обмеження SQLite ==
 created_at TEXT NOT NULL
);
.schema customers
FROM products
SELECT id, name, email, phone
PRAGMA journal_mode=WAL;
<pre>

{| class="wikitable" style="width:100%;"

 id INTEGER PRIMARY KEY,
Такий запит покаже продажі та реалізація по товарах.; external_id TEXT,
);
</div>
Кращий підхід:
Приклади локальних даних:

Це має змогу бути корисно після масового видалення або очищення даних.; Це комфортно під час аналізу або міграції.; id INTEGER PRIMARY KEY,

Основні переважні аспекти:

!; Приклад таблиці:
AFTER UPDATE OF price ON products
|-
| Що таке SQLite?;

SQLite підтримує роботу багато можливостей реляційних баз даних:

завдяки наявності EXPLAIN QUERY PLAN користувачі можуть зрозуміти, як виконується запит.;

WHERE active = 1

DELETE FROM products

Чи підтримує роботу SQLite SQL?

ADD COLUMN status TEXT DEFAULT 'new';

Транзакції SQLite


 created_at TEXT NOT NULL

 id INTEGER PRIMARY KEY,

{| class="wikitable" style="width:100%;"

WHERE supplier_id = 25;
як ілюстрація, при переході з BAS або старої ERP у K2 ERP можна зробити локальну базу:
 id INTEGER PRIMARY KEY,

__TOC__

!;<pre>

Для захисту можуть використовуватися:

Приклади:
 payload TEXT NOT NULL,
SQLite використовують у мобільних застосунках, десктопних програмах, тестах, кешах, локальних утилітах, прототипах, IoT, міграційних інструментах і невеликих внутрішніх системах.; SET balance = balance - 80000
Так.; target_count
[[Категорія:Склад]]
Отримати клієнтів:
SELECT *
 id INTEGER PRIMARY KEY,
Можна створити таблицю:
== FAQ ==

Приклад:

; INSERT INTO price_audit (product_id, old_price, new_price, changed_at)

Але краще робити копію тоді, коли:

<pre>

WHERE order_date >= '2026-05-01'

customer = Customer(

  • розмір файлу;
  • швидкість диска;
  • кількість індексів;
  • кількість записів;
  • частоту запису;
  • тривалість транзакцій;
  • резервні копії;
  • блокування;
  • потребу в архівуванні.;

Краще зберігати в Git:

* клієнтів;
* номенклатуру;
* ціни;
* залишки;
* чернетки замовлень;
* підписи клієнтів;
* фото;
* чергу синхронізації.; SELECT product_id, SUM(quantity) AS qty, SUM(amount) AS total
<pre>

 number TEXT,

* info;
* warning;
* error;
* critical.; 1000 грн 50 коп.; як ілюстрація:

Це корисно для пошуку повільних запитів і перевірки, чи застосовується індекс.; Індекси корисні для полів, за якими часто шукають або фільтрують:

У полі ''payload'' можна зберегти JSON із API.; Невелика утиліта для імпорту прайсу постачальника.; target_amount

Приклад:
== SQLite і резервні копії ==
<pre>
Приклад: отримати замовлення разом із клієнтами.; }
Приклад аудиту зміни ціни:
завдяки наявності зовнішньому ключу можна зрозуміти, якому клієнту належить замовлення.; |}

Особливість SQLite у з цієї причини, що вона: COMMIT; Приклад:

 name TEXT NOT NULL

Так.; Приклад запису:

status TEXT
""")
== SQLite і десктопні ERP-утиліти ==
-- багато INSERT
)

SQLite зручна для локального журналу подій.; SQLite потрібна там, де потрібна проста, надійна й локальна база даних без складного адміністрування.; object_type TEXT NOT NULL,

CREATE UNIQUE INDEX idx_orders_external_id

SELECT * FROM customers LIMIT 10;

 name="ТОВ замовник Плюс",
CREATE TABLE payments (
CREATE TABLE api_messages (
SQLite добре підходить для навчання SQL.; # Готує файл для ERP.;<pre>

!; ON products (sku);
Після відновлення зв’язку інформаційні дані передаються в ERP.;
; SQLite має змогу бути корисною для:
VALUES (old.id, old.price, new.price, datetime('now'));

Звичайний файл SQLite сам по собі не є собою автономно зашифрованим.; FROM supplier_prices

== Простий приклад SQLite ==
GROUP BY edrpou
Для грошей потрібно бути уважним із типом REAL, бо числа з плаваючою точкою можуть давати неточності.; source_amount
 email="info@example.com"
Ризики:
<pre>

== SQLite і Git ==

 stock_qty REAL

Приклад даних:

Для багатокористувацького мережевого сценарію краще серверна СУБД.; !;== SQLite і аналітичні інструменти ==
 id INTEGER PRIMARY KEY,
Менеджер функціонує в мобільному застосунку без інтернету.;<pre>

Приклад таблиці товарів:

<pre>

Увімкнути WAL можна так:
Якщо сайт передає замовлення в локальну SQLite-базу, варто створити індекс по зовнішньому номеру:
CREATE TABLE IF NOT EXISTS customers (
SELECT *
SELECT id, name, email
== SQLite і ORM ==
WAL часто корисний, коли:
CREATE TABLE orders (
);
<pre>

 "customer": "ТОВ замовник Плюс",

 number TEXT NOT NULL,
<pre>
<pre>
[[Категорія:Транзакції]]
petrenko update order ORD-000145
api_site create order WEB-10425

У PHP SQLite має змогу використовуватися для невеликих сайтів, внутрішніх інструментів або прототипів.; Команда ANALYZE збирає статистику для оптимізатора запитів.; SQLite часто зберігає дати як TEXT, INTEGER або REAL.; );

технічна архітектура Вбудована бібліотека Окремий сервер
Зберігання Один файл Серверні файли й служби
конфігурація Мінімальне Потрібне адміністрування
Масштаб Локальні й помірні задачі Великі системи й багато користувачів
Одночасний запис Обмежений Краще підтримується
Типовий сценарій Мобільний застосунок, кеш, прототип ERP, CRM, великий вебсервіс

SQLite і Node.js

  • база локальна;
  • користувач системи один або їх небагато;
  • інформаційні дані зберігаються на пристрої;
  • потрібен офлайн-режим;
  • потрібна проста установка;
  • потрібно оперативно зробити прототип;
  • потрібно обробити файл даних;
  • потрібно зберегти кеш;
  • потрібна тестова база;
  • потрібне проміжне сховище для міграції.; SELECT name, price

Приклад: де SQLite доречна

id INTEGER PRIMARY KEY,

SQLite зручна для невеликих службових програм:

raw_products інформаційні дані товарів як у джерелі
clean_products Очищена номенклатура
map_products Відповідність старого й нового коду
err_products Помилки товарів
ctl_products Контрольні суми по товарах

ORDER BY total DESC;

SQLite часто застосовується разом з ORM.;=== Чи можна використовувати SQLite для міграції даних? ===

100050

created_at TEXT NOT NULL

Індекси SQLite

SQLite має змогу зберігати BLOB-дані, як ілюстрація файли або зображення.; SELECT * );

2026-05-15

CREATE TABLE orders (


# Отримати CSV від постачальника.;== Типи даних у SQLite ==

SQLite добре підходить як проміжна база для міграції.;== SQLite і логування ==

== SQLite і VACUUM ==

 source_amount REAL,

* читати можуть багато процесів;
* запис одночасно обмежений;
* довгі транзакції можуть блокувати інших;
* часті масові записи потрібно планувати обережно.;<pre>

== Приклад логів інтеграції ==

* блокування;
* пошкодження;
* нестабільна швидкість;
* проблеми з одночасним доступом;
* некоректна робота файлових блокувань.; CREATE TABLE app_logs (
BEGIN TRANSACTION;
 payment_date TEXT NOT NULL
!;<pre>

* локальна база десктопного застосунку;
* кеш API;
* тестова база;
* імпорт CSV;
* прототип сервісу;
* локальний журнал подій.; # Завантажити в SQLite.; id INTEGER PRIMARY KEY,

Файл можна скопіювати, архівувати, перенести на інший комп’ютер або підключити до іншої програми.;<pre>

Причини переходу:

FROM contracts

Індекс прискорює пошук.; !; Навіть у SQLite потрібно:

SQLite має змогу бути корисною для локальних модулів, кешів, мобільних застосунків, агентів обміну або міграційних утиліт.; Таблиця зберігає інформаційні дані у вигляді рядків і колонок.; Дата
Але часто краще зберігати сам файл окремо, а в SQLite — шлях або метадані.; Призначення
 order_date TEXT NOT NULL,
 target_amount REAL,
WHERE end_date IS NULL;

ORDER BY price DESC;

Приклад: додати поле статусу в замовлення.;

SQLite і зовнішні ID

  • вставляти 100 000 рядків по одному без транзакції;
  • після кожного INSERT чекати запису на диск.; price REAL NOT NULL CHECK (price >= 0)
product T-00145 Не знайдено одиницю виміру
customer C-00077 Порожній ЄДРПОУ
contract D-00031 Не вказана валюта

Коли SQLite не підходить

Приклад повільного сценарію

Приклад:

SQLite і NULL

Недоліки SQLite

Приклад SQLite у складському модулі

Добра структура SQLite для міграції

quantity REAL NOT NULL CHECK (quantity > 0),
id INTEGER PRIMARY KEY,

У цю таблицю можна записувати помилки: з цієї причини права доступу зазвичай контролюються:

Цей запит поверне активних клієнтів, відсортованих за назвою.; |-

Atomicity операційна дія виконується в цілому або не виконується Платіж не має бути наполовину проведений
Consistency інформаційні дані залишаються узгодженими Замовлення має існуючого клієнта
Isolation Транзакції не повинні ламати одна одну Паралельні операції не змішують інформаційні дані
Durability Після COMMIT інформаційні дані збережені Після запису інформаційні дані не зникають

Приклад черги інтеграції

VALUES ('ТОВ замовник Плюс', 'info@example.com', '+380XXXXXXXXX');

);

SQLite і BLOB

Коли SQLite підходить

SQLite має консольний інструмент, через який можна працювати з базою.; Поле

  • сума обов’язкова;
  • сума має бути більшою за нуль;
  • валюта за замовчуванням UAH;
  • дата платежу обов’язкова.;

rows = cursor.fetchall()

customers id 15
customers name ТОВ “замовник Плюс”
orders customer_id 15
orders number ORD-000145

!; user_id TEXT,


 amount REAL NOT NULL CHECK (amount > 0),

FROM orders
 customer_id INTEGER NOT NULL,
CREATE TABLE products (
SQLite добре підходить, якщо:

COMMIT;

name TEXT NOT NULL

conn.commit()

SQLite і EXPLAIN QUERY PLAN

Тимчасові таблиці корисні для проміжних розрахунків.;== Коли потрібні індекси ==


Приклад:
<pre>
amount_cents INTEGER
!;

Якщо увімкнений WAL, потрібно враховувати додаткові файли або правильно завершити транзакції перед копіюванням.; SQLite підтримує роботу транзакції через BEGIN, COMMIT і ROLLBACK.;== Приклад аналітики по продажах ==

SQLite і одночасний доступ

Після завантаження можна знайти товари без артикула:

SQLite на мережевому диску

SQLite має гнучку систему типів.; SQLite часто використовують у тестах.; Програма відкриває файл бази даних, виконує SQL-запити й сама керує доступом до цього файлу через SQLite.; Типові сценарії:

;== SQLite і тригери ==

ORDER BY

Для старту достатньо встановити інструмент SQLite або використати мову програмування з підтримкою SQLite.; object_id

SQLite і серверні бази даних

Так, підтримує роботу таблиці, SELECT, INSERT, UPDATE, DELETE, JOIN, індекси, транзакції й обмеження.;

Приклад:
Знайти дублікати контрагентів за ЄДРПОУ:
!; Значення

 price REAL,

HAVING COUNT(*) > 1;

== Основні функціональні можливості SQLite ==

* не потребує окремого сервера;
* зберігає базу в одному файлі;
* функціонує всередині застосунку;
* підтримує роботу SQL;
* має транзакції;
* проста для розгортання;
* добре підходить для локальних даних;
* часто застосовується в мобільних і десктопних програмах.; Поширені помилки:

Іноді проєкт починається з SQLite, а потім переходить на PostgreSQL або іншу серверну СУБД.; |-
| app.db
| інформаційні дані застосунку
| Десктопна програма
|-
| mobile.db
| Локальні інформаційні дані телефона
| Мобільний застосунок
|-
| migration.db
| Проміжні інформаційні дані міграції
| Перехід у K2 ERP
|-
| cache.db
| Кеш API
| Локальна синхронізація
|-
| logs.db
| Журнал подій
| Інтеграційний агент
|}

=== Що таке WAL у SQLite? ===

);

== Приклад резервної копії ==

Приклад:
Так не вийде зберегти рядок замовлення з від’ємною кількістю.; SQLite часто використовують у мобільних застосунках, десктопних програмах, браузерах, IoT-пристроях, локальних кешах, тестових середовищах, невеликих сервісах, прототипах, аналітичних утилітах, міграційних інструментах і локальних модулях ERP.; |-
| Які головні ризики?; SQLite можна використовувати в контейнерах, але потрібно правильно зберігати файл бази.; # Формує звіт помилок.; * external_order_id;
* external_customer_id;
* external_payment_id;
* external_product_id;
* external_sync_id.;== SQLite і Power BI ==

<pre>

CREATE TABLE order_lines (

* source_customers;
* source_products;
* source_contracts;
* source_balances;
* mapping_tables;
* validation_errors;
* migration_logs;
* control_totals.;

FROM orders

Пов’язана сторінка: Power BI

);

Приклад документації таблиці

Обмеження допомагають зберігати якість даних.;

<pre>
FROM orders
== SQLite і міграції структури ==
{| class="wikitable" style="width:100%;"
== Приклад ORM + SQLite ==
== JOIN у SQLite ==
== Приклад структури SQLite для міграції ==
Приклад: продажі та реалізація по клієнтах.;<pre>

SQLite-файл потрібно захищати.; можна зберігати як:

* мобільні застосунки;
* десктопні програми;
* локальні конфігурація;
* кеш API;
* офлайн-режим;
* тестування;
* прототипи;
* невеликі внутрішні інструменти;
* обробка CSV або Excel;
* міграційні утиліти;
* зберігання логів;
* локальні черги;
* embedded-системи;
* IoT-пристрої;
* навчальні приклади SQL.;== SQLite і тимчасові таблиці ==

Потрібно визначити:

  • офлайн-робоче місце;
  • мобільний складський облік;
  • локальний касовий компонент;
  • агент обміну;
  • інструмент імпорту;
  • міграційна утиліта;
  • тестовий стенд;
  • локальний довідник;
  • кеш номенклатури;
  • контроль якості даних.; # Завантажити кредиторку.; |-
Де корисна в ERP?; Типовий принцип: ; * виросла кількість користувачів;
  • зросло навантаження;
  • потрібна реплікація;
  • потрібні складні права;
  • потрібна серверна інфраструктура;
  • потрібна висока доступність;
  • потрібна масштабованість;
  • з’явилась велика ERP-логіка.; | 180.00
1
2 COFFEE-1KG Кава арабіка 1 кг кг 720.00 1

WAL означає Write-Ahead Logging.; Без додаткового захисту не варто зберігати:

!; * оперативно створити базу;

  • не потрібен сервер;
  • без зайвих зусиль очистити інформаційні дані;
  • можна запускати тести локально;
  • комфортно перевіряти моделі;
  • без зайвих зусиль створювати тимчасові таблиці.; Приклад:

* Customer → customers;
* Product → products;
* Order → orders;
* Payment → payments;
* MigrationLog → migration_logs.; Рівні логів:
CREATE TABLE sync_queue (

== переважні аспекти SQLite ==

{| class="wikitable" style="width:100%;"
SQLite має змогу використовуватися в інтеграційних агентах.; Це означає:
Практичний варіант — зберігати дату в ISO-форматі:

=== Чи підходить SQLite для ERP? ===
'''JOIN''' надає можливість об’єднувати інформаційні дані з кількох таблиць.; Команда '''VACUUM''' має змогу перебудувати файл бази й звільнити невикористане місце.; ORDER BY name;

* використовувати SQLite як серверну ERP-базу для багатьох користувачів;
* не робити резервні копії;
* зберігати файл у ненадійному місці;
* не створювати індекси;
* не використовувати транзакції;
* вставляти великі обсяги рядок за рядком без транзакції;
* зберігати секрети без захисту;
* не контролювати зовнішні ключі;
* не документувати схему;
* копіювати файл під час активного запису;
* використовувати SQLite на нестабільному мережевому диску.; Призначення
 id INTEGER PRIMARY KEY,

|- | INTEGER | Цілі числа | 100 |- | REAL | Числа з дробовою частиною | 1250.75 |- | TEXT | Текст | ТОВ “організація” |- | BLOB | Бінарні інформаційні дані | файл або зображення |- | NULL | Відсутність значення | порожнє поле |}

payload TEXT NOT NULL,
"total": 24500

Потім можна читати:

Приклад обмежень

як ілюстрація:

Приклад пошуку дублів

SQLite і обмеження розміру

істотно. SQLite добре підходить для локальних, вбудованих і помірних задач, але не варто використовувати її як основну базу великої ERP з багатьма одночасними користувачами, складними правами доступу, великими транзакціями та високим навантаженням на запис.; завдяки наявності UNIQUE по external_order_id одне замовлення не завантажиться двічі.; Приклад використання

SQLite і JSON

Якщо SQLite застосовується в бізнес-процесах, потрібно вести аудит.; * локальних довідників;

  • налаштувань;
  • журналів;
  • кешу;
  • імпорту файлів;
  • локальної аналітики;
  • невеликих CRM;
  • складських утиліт;
  • інструментів міграції.; * INTEGER;
  • REAL;
  • TEXT;
  • BLOB;
  • NULL.; active INTEGER DEFAULT 1

!; Але як основна база великої багатокористувацької ERP вона зазвичай не підходить.; edrpou TEXT UNIQUE,

Усе це зберігається не на окремому сервері, а у файлі company.db.; price REAL,

!; # Перевіряє артикулі.; Ознака VALUES ('USB-C-1M-BLK', 'Кабель USB-C 1 м чорний', 'шт.', 180.00);

Структуру SQLite-бази можна змінювати через SQL.; GROUP BY product_id Первинний ключ ідентифікує кожен рядок таблиці.; );

CREATE INDEX idx_products_sku

SQLite і представлення

!;=== Для чого використовують SQLite? ===

  • є собою кілька читачів;
  • є собою фоновий бізнес-процес запису;
  • застосунок активно читає інформаційні дані;
  • потрібна краща паралельність;
  • база застосовується як локальний кеш.; );

Статуси можуть бути: 2026-05-15 10:30:00

total_amount REAL

|- | info | Завантажено 240 замовлень із сайту | 2026-05-15 10:00 |- | warning | 12 товарів не знайдено по артикулу | 2026-05-15 10:01 |- | error | Помилка авторизації API | 2026-05-15 10:05 |}

WHERE sku = 'USB-C-1M-BLK';

VALUES (80000, 'UAH', '2026-05-15');

  • імпортувати CSV;
  • створити таблиці;
  • зробити JOIN;
  • порахувати підсумки;
  • знайти дублікати;
  • сформувати контрольний звіт;
  • експортувати результат.;

переважні аспекти:

DELETE видаляє запис.; Файл

!; Приклад:

cursor.execute("""

id INTEGER PRIMARY KEY,

!; |- | Чи підтримує роботу SQL?; Якщо сталася помилка, можна виконати:

Приклади: WHERE sku = 'USB-C-1M-BLK'; !; WHERE id = 10; Результат — проста, переносима й надійна локальна база для задач, де не потрібен окремий сервер: кеш, мобільний застосунок, прототип, тестування, міграція або невеликий інструмент.; * створення таблиць;

  • SELECT;
  • INSERT;
  • UPDATE;
  • DELETE;
  • JOIN;
  • GROUP BY;
  • індекси;
  • транзакції;
  • обмеження;
  • представлення;
  • тригери.; id INTEGER PRIMARY KEY,

Основні типи:

Це має змогу означати договори без дати завершення.; # Шукає дублікати.; Щоб SQLite працювала швидше, потрібно:

У ньому можна створити таблицю клієнтів:

SET price = 190.00

  • локальний кеш мобільного модуля;
  • проміжна база міграції;
  • журнал інтеграцій;
  • локальна черга API;
  • тестова база для прототипу;
  • тимчасове сховище контрольних сум;
  • автономний компонент для збору даних;
  • локальні конфігурація агента синхронізації.; SELECT customer_id, SUM(total_amount) AS total_sales

Практичні варіанти:

created_at TEXT NOT NULL

!; Її без зайвих зусиль підключити, без зайвих зусиль перенести, без зайвих зусиль зробити резервну копію, але вона не призначена для всіх сценаріїв великих багатокористувацьких ERP-систем.; cursor.execute("SELECT id, name FROM customers")

!;

!; |- | Який результат?; CREATE TABLE supplier_prices (

!; Зміна ORM сформує SQL і збереже запис у SQLite.; |- | Чи потрібен сервер?;== Що таке SQLite ==

істотно не плутати:

CREATE TABLE orders (

  • файл можна скопіювати;
  • у файлі можуть бути персональні інформаційні дані;
  • у файлі можуть бути клієнти;
  • у файлі можуть бути ціни;
  • у файлі можуть бути платежі;
  • локальний комп’ютер має змогу бути втрачений;
  • резервні копії можуть зберігатися без контролю.; INSERT додає новий запис.; |-

| customers | 12450 | 12450 | | | OK |- | products | 8200 | 8198 | | | CHECK |- | balances | 15200 | 15200 | 18200000 | 18200000 | OK |}

Чи підтримує роботу SQLite транзакції?

number TEXT NOT NULL,

!; Якщо помилка сталася на третьому кроці, краще відкотити все, щоб не залишити неповний запис.; name

У застосунках краще вести міграції версіями: SELECT orders.number, orders.order_date, customers.name

Для великої багатокористувацької ERP це важливе обмеження.; unit

order_date TEXT NOT NULL external_id TEXT NOT NULL, CREATE TEMP TABLE temp_duplicates AS Пакетна транзакція має змогу бути значно швидшою.; У K2 ERP або проєктах навколо K2 ERP SQLite має змогу використовуватися як допоміжна база.;

Типові помилки при використанні SQLite

SQLite відрізняється від серверних СУБД.; Перевага

currency TEXT NOT NULL DEFAULT 'UAH',

істотно враховувати:

Файли:

AND order_date < '2026-06-01';

migration.db HAVING COUNT(*) > 1; FROM products

);

  • створювати правильні індекси;
  • не робити зайві запити;
  • використовувати транзакції для пакетного запису;
  • не тримати транзакції відкритими довго;
  • обмежувати розмір результату;
  • використовувати WHERE;
  • не завантажувати все одразу;
  • перевіряти план запиту;
  • використовувати WAL там, де доречно.; SQLite — це реляційна база даних, яка надає можливість створювати таблиці, виконувати SQL-запити, зберігати записи, будувати індекси, використовувати транзакції, обмеження, JOIN, представлення й тригери.; object_id TEXT,

Чим SQLite відрізняється від PostgreSQL або MySQL?

Транзакція — це група операцій, які мають виконатися разом.; PostgreSQL і MySQL — це серверні СУБД, краще пристосовані для багатьох користувачів, великих систем і високого навантаження.;

Додати клієнта:

<pre>

* таблиці;
* поля;
* ключі;
* індекси;
* тригери;
* представлення;
* зв’язки;
* правила міграції;
* контрольні суми;
* джерела даних.; | Для локальних застосунків, мобільних програм, кешу, тестів, прототипів, логів і міграційних утиліт.; Це сприяє не створювати двох контрагентів з однаковим ЄДРПОУ.; Принцип
END;
currency TEXT,

SQLite у десктопних програмах

Це корисно для аналітики, звітів і контрольних сум.; SQLite підтримує роботу принципи ACID.;== Первинний ключ ==

"order_id": "WEB-10425",
  • не зберігати зовнішні ID;
  • не рахувати контрольні суми;
  • не логувати помилки;
  • не робити таблиці мапінгу;
  • не фіксувати джерело даних;
  • не перевіряти дублікати;
  • не зберігати версію вивантаження;
  • не відокремлювати сирі інформаційні дані від очищених;
  • не робити повторюваний бізнес-процес завантаження;
  • не документувати структуру проміжної бази.;

Що не варто зберігати в SQLite без захисту

DELETE

* шифрування диска; * захист операційної системи; * обмеження доступу до файлу; * окремі розширення або бібліотеки шифрування; * шифрування чутливих полів; * безпечне зберігання ключів; * контроль резервних копій.; Робота через мережеву папку має змогу створювати ризики: SQLite зручна для тестування ORM, бо базу без зайвих зусиль створити, очистити й видалити.; PostgreSQL / MySQL / SQL Server