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