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

SQLite

Матеріал з K2 ERP Wiki

ORDER BY price DESC;

JOIN дає можливість об’єднувати інформаційні дані з кількох таблиць. SQLite зберігає всю базу в одному файлі. SQLite зручна як проміжна база для очищення даних, мапінгу, логів помилок, контрольних сум і підготовки файлів для завантаження в ERP. Питання CREATE TABLE products (

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

Усе це зберігається не на окремому сервері, а у файлі company.db. Невелика утиліта для імпорту прайсу постачальника. # Завантажує Excel-файл. Ключові поля Поширені помилки:

Коли потрібні індекси


FROM orders

== SQLite для тестування ==

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

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

 stock_qty REAL
[[Категорія:ORM]]

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

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

level TEXT NOT NULL,

Приклад:

cursor.execute("SELECT * FROM customers WHERE name = ?", (name,)) Практичні варіанти: Менеджер функціонує в мобільному застосунку без інтернету. FROM customers

);

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

<pre> SQLite не виступає як найкращим вибором, якщо: ! object_name Приклад: SQLite можна використовувати для локальної аналітики над файлами. Призначення <pre> target_amount REAL, |- | 001 | Створено таблицю customers |- | 002 | Додано таблицю orders |- | 003 | Додано status до orders |- | 004 | Додано індекс external_order_id |} == SQLite і ORM == <pre> <pre> Кращий підхід: * Customer → customers; * Product → products; * Order → orders; * Payment → payments; * MigrationLog → migration_logs. message WHERE active = 1 Приклад: == Зовнішній ключ == Типові обмеження: Це допоможе не створити дублікат одного й того самого замовлення. # Створити договори.

status TEXT,

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

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

"customer": "ТОВ клієнт ERP Плюс",

cursor = conn.cursor()

  • імпортувати CSV;
  • створити таблиці;
  • зробити JOIN;
  • порахувати підсумки;
  • знайти дублікати;
  • сформувати контрольний звіт;
  • експортувати результат. Це означає, що customer_id у замовленні має відповідати існуючому клієнту. Без додаткових заходів його можна скопіювати. HAVING COUNT(*) > 1;

Приклад зв’язку клієнтів і замовлень

SQLite і документація схеми

|- | petrenko | update | order | ORD-000145 |- | api_site | create | order | WEB-10425 |}

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


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

SELECT customer_id, SUM(total_amount) AS total_sales
Для великої багатокористувацької ERP це важливе обмеження. * оперативно створити базу;
* не потрібен сервер;
* швидко очистити інформаційні дані;
* можна запускати тести локально;
* інтуїтивно перевіряти моделі;
* швидко створювати тимчасові таблиці. SQLite має гнучку систему типів. active
 error_message TEXT NOT NULL,

);

[[Категорія:Впровадження ERP]]

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

== SQLite і резервні копії ==

<pre>

* SQL-міграції;
* схему бази;
* тестові seed-дані;
* документацію;
* скрипти створення.== SQLite у навчанні SQL ==

Іноді можна отримати помилку, що база заблокована. через UNIQUE по ''external_order_id'' одне замовлення не завантажиться двічі. !== Основні функції ERP SQLite ==

SELECT name, price
! ROLLBACK;

== SQLite і JSON ==

 id INTEGER PRIMARY KEY,

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

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

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

object_type TEXT,

customer = Customer(

SELECT id, name, email Оскільки SQLite — файлова база, резервну копію можна зробити копіюванням файлу. source_count

! Робота через мережеву папку здатна створювати ризики:

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

Результат: Так. Ризик ORM дає можливість працювати з таблицями SQLite як із моделями. У такій таблиці можна зберігати номенклатуру:

CREATE TRIGGER log_product_price_update 100050 ! Навіть у SQLite потрібно:

source_count INTEGER,

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

Команда VACUUM здатна перебудувати файл бази й звільнити невикористане місце.== SQLite і параметризовані запити ==

! active INTEGER DEFAULT 1

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

== Приклад структури SQLite для міграції ==

 id INTEGER PRIMARY KEY,
<pre>
<pre>
<pre>
 created_at TEXT NOT NULL
cursor.execute("INSERT INTO customers (name) VALUES (?)", ("ТОВ Альфа",))

WHERE supplier_sku IS NULL OR supplier_sku = '';

! SQLite здатна зберігати JSON як текст і в багатьох сценаріях працювати з JSON-даними. id INTEGER PRIMARY KEY,

SELECT * FROM customers LIMIT 10;

Приклад:
== SQLite і Node.js ==
У цю таблицю можна записувати помилки:

WAL часто корисний, коли: AFTER UPDATE OF price ON products CREATE TABLE orders (

Краще:

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

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

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

Це корисно для аналітики, звітів і контрольних сум. Тип

У Node.js SQLite здатна використовуватися для локальних застосунків, CLI-утиліт, Electron-додатків або тестів. Приклад

критично:

 id INTEGER PRIMARY KEY,
CREATE TABLE customers (
!

);


* SELECT;
* INSERT;
* UPDATE;
* DELETE;
* CREATE TABLE;
* ALTER TABLE;
* DROP TABLE;
* CREATE INDEX;
* JOIN;
* GROUP BY;
* ORDER BY. Файл

 created_at TEXT NOT NULL

SQLite часто використовують у мобільних застосунках, десктопних програмах, браузерах, IoT-пристроях, локальних кешах, тестових середовищах, невеликих сервісах, прототипах, аналітичних утилітах, міграційних інструментах і локальних модулях ERP. Перевага
== SQLite і K2 ERP ==
Особливість SQLite у тому, що вона:
Поверне товари від найдорожчого до найдешевшого. Можна створити таблицю:

[[Категорія:Service Desk]]
Для такого сценарію краще використовувати серверну СУБД, а SQLite залишити для локальних кешів, агентів або допоміжних інструментів.<pre>

Для міграції краще мати окремі групи таблиць:

  • застосунком;
  • операційною системою;
  • файловими правами;
  • шифруванням;
  • логікою API;
  • окремим серверним шаром;
  • політиками доступу до пристрою. # Шукає дублікати. # Формує звіт помилок. created_at TEXT NOT NULL

Приклад: FROM orders

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

Коротко

'''Первинний ключ''' ідентифікує кожен рядок таблиці. Сценарії:
=== Чи можна використовувати SQLite для міграції даних? ===

Транзакція — це група операцій, які мають виконатися разом.== UNIQUE ==

# Зберігає інформаційні дані у SQLite. PostgreSQL / MySQL / SQL Server
external_order_id TEXT UNIQUE,
Це оптимізує не створювати двох контрагентів з однаковим ЄДРПОУ. # Записати контрольну суму. SELECT orders.number, orders.order_date, customers.name

FROM active_customers;

GROUP BY edrpou

);

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

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

Тому права доступу зазвичай контролюються:

Зберігати файл у BLOB Усе в одній базі База оперативно росте
Зберігати файл окремо Легше керувати файлами Потрібно контролювати шляхи

ORDER BY

SQLite і BLOB

! # Знайти дублікати. error_message


WAL — це Write-Ahead Logging, режим журналювання, який здатна покращити паралельне читання й запис у певних сценаріях. Приклад:
SQLite зберігає локально:
WHERE order_date >= '2026-05-01'
Приклад:

== SQLite і зовнішні ID ==

Коли інтернет з’являється, застосунок передає інформаційні дані в ERP. email TEXT,
""")
Приклад: додати поле статусу в замовлення. Для чутливих даних потрібні файлові права, шифрування, захист пристрою й контроль резервних копій. # Порахувати зміни цін.== GROUP BY ==

 id INTEGER PRIMARY KEY,

* raw_* — сирі інформаційні дані з джерела;
* clean_* — очищені інформаційні дані;
* map_* — таблиці відповідності;
* err_* — помилки;
* log_* — журнали;
* ctl_* — контрольні суми;
* export_* — фінальні інформаційні дані для завантаження. Рівні логів:
|-
| customers
| Контрагенти
| id, edrpou, name
|-
| products
| Номенклатура
| id, sku, name
|-
| orders
| Замовлення
| id, external_order_id, customer_id
|-
| migration_errors
| Помилки міграції
| object_type, object_id, error_message
|}

Приклад: продажі та реалізація по клієнтах. це легка вбудована реляційна база даних, яка зберігає всі інформаційні дані в одному файлі та не потребує окремого серверного процесу виступає ключовою рисою '''SQLite'''. unit
як приклад:
import sqlite3

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

<div style="border:3px solid #2e7d32; background:#e8f5e9; padding:14px; margin:16px 0;">
<pre>
Поганий підхід:
Структуру SQLite-бази можна змінювати через SQL. object_type TEXT NOT NULL,

SQLite здатна використовуватися в інтеграційних агентах. Далі можна виконувати SQL-команди:

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

conn.commit()

!<pre>
)

SQLite часто застосовується для разом з ORM.== JOIN у SQLite ==

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

DELETE FROM products

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

SELECT product_id, SUM(quantity) AS qty, SUM(amount) AS total DELETE видаляє запис. У бізнес-системах часто краще не видаляти фізично, а використовувати ознаку активності:

customer.save()

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

INSERT INTO payments (amount, currency, payment_date) критично не плутати:

Приклад: Це здатна допомогти SQLite краще планувати виконання запитів. target_count

  • не потребує окремого сервера;
  • зберігає базу в одному файлі;
  • функціонує всередині застосунку;
  • підтримує SQL;
  • має транзакції;
  • проста для розгортання;
  • добре підходить для локальних даних;
  • часто застосовується для в мобільних і десктопних програмах. CREATE TABLE app_logs (
ANALYZE;

Приклад:

retry_count INTEGER DEFAULT 0,

Python має вбудовану підтримку SQLite через компонент sqlite3. Без додаткового захисту не варто зберігати:

INSERT

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

SQLite зручна для локального журналу подій. SET price = 190.00 ! payment_date TEXT NOT NULL

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

1000 грн 50 коп.== SELECT ==

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

Поле id виступає як унікальним і дає можливість точно знайти замовлення. Якщо сталася помилка, можна виконати:

conn.close()

ORM сформує SQL і збереже запис у SQLite. {| class="wikitable" style="width:100%;"

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

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

! FROM contracts

SQLite часто зберігає дати як TEXT, INTEGER або REAL.

SQLite і безпека

) ON orders (external_order_id);

! Призначення

Результат — проста, переносима й надійна локальна база для задач, де не потрібен окремий сервер: кеш, мобільний застосунок, прототип, тестування, міграція або невеликий інструмент. Що містить
'''UNIQUE''' забороняє дублікати. SELECT *

 AND order_date < '2026-06-01';

HAVING COUNT(*) > 1;

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

! Команда ANALYZE збирає статистику для оптимізатора запитів. * база не застосовується для;

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

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

SQLite здатна зберігати BLOB-дані, як приклад файли або зображення. Після завантаження можна знайти товари без артикула:

[[Категорія:Індекси]]

Погано:

 sku TEXT NOT NULL,

CREATE UNIQUE INDEX idx_orders_external_id

SQLite і Docker

! У полі payload можна зберегти JSON із API. |}

SQLite і права доступу

migration.db SELECT id, name, email SELECT *

SQLite зберігає:

SQLite і Power BI

Зміна

EXPLAIN QUERY PLAN

SQLite і NULL

<pre>
{| class="wikitable" style="width:100%;"
WHERE id = 10;
Для грошей потрібно бути уважним із типом REAL, бо числа з плаваючою точкою можуть давати неточності.== SQLite і тимчасові таблиці ==

Під час міграції SQLite можна використовувати для контрольних сум.
Практичний приклад. Якщо потрібно зробити локальну утиліту для вивантаження даних з BAS, 1С або старої ERP, SQLite здатна зберігати проміжні таблиці: номенклатуру, контрагентів, договори, залишки, помилки імпорту й контрольні суми перед завантаженням у K2 ERP.

 edrpou TEXT UNIQUE,
GROUP BY product_id
== Приклад індексів для інтеграції ==
);
WHERE supplier_id = 25;
== CHECK ==

== SQLite і аудит дій ==

Файли:

<pre>

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

* підготовки вивантажень;
* зберігання локальних агрегатів;
* контрольних сум;
* тимчасових таблиць;
* невеликих аналітичних наборів;
* перевірки якості даних. FROM customers;

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

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

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

як приклад, агент обміну між сайтом і ERP здатна зберігати:
phone TEXT

Основні недоліки:

.tables cursor.execute(""" Приклад: Якщо увімкнений WAL, потрібно враховувати додаткові файли або правильно завершити транзакції перед копіюванням. id INTEGER PRIMARY KEY,

  • виросла кількість користувачів;
  • зросло навантаження;
  • потрібна реплікація;
  • потрібні складні права;
  • потрібна серверна інфраструктура;
  • потрібна висока доступність;
  • потрібна масштабованість;
  • з’явилась велика ERP-логіка. WHERE end_date IS NULL;

Так не вийде зберегти рядок замовлення з від’ємною кількістю. ! # Перевіряє артикулі. | Проста файлова база для надійного локального зберігання даних без складного адміністрування. status TEXT DEFAULT 'new',

user_id TEXT,

FROM customers

quantity REAL NOT NULL CHECK (quantity > 0),

);

created_at TEXT NOT NULL

SQLite у мобільних застосунках

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

У коді можна створити клієнта:

supplier_sku TEXT,
app.db інформаційні дані застосунку Десктопна програма
mobile.db Локальні інформаційні дані телефона Мобільний застосунок
migration.db Проміжні інформаційні дані міграції Перехід у K2 ERP
cache.db Кеш API Локальна синхронізація
logs.db Журнал подій Інтеграційний агент
created_at TEXT NOT NULL
Причини:
Додати клієнта:
 price REAL,
|-
| технічна архітектура
| Вбудована бібліотека
| Окремий сервер
|-
| Зберігання
| Один файл
| Серверні файли й служби
|-
| конфігурація
| Мінімальне
| Потрібне адміністрування
|-
| масштаб бізнесу
| Локальні й помірні задачі
| Великі системи й багато користувачів
|-
| Одночасний запис
| Обмежений
| Краще підтримується
|-
| Типовий сценарій
| Мобільний застосунок, кеш, прототип
| ERP, CRM, великий вебсервіс
|}

Операції:

<pre>

* база локальна;
* користувач системи один або їх небагато;
* інформаційні дані зберігаються на пристрої;
* потрібен офлайн-режим;
* потрібна проста установка;
* потрібно оперативно зробити прототип;
* потрібно обробити файл даних;
* потрібно зберегти кеш;
* потрібна тестова база;
* потрібне проміжне сховище для міграції. Приклад
== SQLite і контрольні суми ==
== SQLite і Python ==
== Приклад документації таблиці ==
! unit TEXT NOT NULL,

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

<pre>

CREATE TABLE orders (

* профіль користувача;
* кеш товарів;
* історія продукту замовлень;
* офлайн-документи;
* черга синхронізації;
* конфігурація;
* повідомлення;
* локальні довідники;
* інформаційні дані для роботи без інтернету. ! На відміну від серверних СУБД, таких як PostgreSQL, MySQL або Microsoft SQL Server, SQLite функціонує як бібліотека всередині застосунку. Приклад:
{| class="wikitable" style="width:100%;"

CREATE TABLE supplier_prices (

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

<pre>

== SQLite і PHP ==

<div style="border:3px solid #1565c0; background:#e3f2fd; padding:14px; margin:16px 0;">

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

Але потрібно пам’ятати: поведінка SQLite здатна відрізнятися від PostgreSQL або MySQL, тому критичні SQL-запити треба перевіряти на цільовій СУБД. Це здатна означати договори без дати завершення. Краще зберігати в Git:

Після цього пошук товару за артикулом буде швидшим:

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

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

!== Індекси SQLite ==

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

* шифрування диска;
* захист операційної системи;
* обмеження доступу до файлу;
* окремі розширення або бібліотеки шифрування;
* шифрування чутливих полів;
* безпечне зберігання ключів;
* контроль резервних копій. SQLite підтримує транзакції через BEGIN, COMMIT і ROLLBACK. SQLite потрібна там, де потрібна проста, надійна й локальна база даних без складного адміністрування. object_type
SQLite підтримує стандартні SQL-операції. | У локальних модулях, мобільному офлайні, агентах інтеграції, кешах, тестах і проміжних базах міграції. SQLite підтримує SQL-запити: SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY, індекси, транзакції, обмеження, представлення й тригери. UPDATE products

);

 source_amount REAL,

}
Для інтеграцій SQLite часто зберігає зовнішні ідентифікатори. |-
| Для чого потрібна? # Готує файл для ERP. cursor.execute("SELECT id, name FROM customers")

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

Це оптимізує зв’язувати локальні записи з ERP, сайтом, CRM або API.[[Категорія:K2 ERP]]
CREATE VIEW active_customers AS

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

Типовий принцип:

 customer_id INTEGER NOT NULL,

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

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

Приклад:
SQLite краще використовувати на локальному диску. Номер замовлення
 order_date TEXT NOT NULL,

 id INTEGER PRIMARY KEY,

* info;
* warning;
* error;
* critical. * external_order_id;
* external_customer_id;
* external_payment_id;
* external_product_id;
* external_sync_id. BEGIN TRANSACTION;
migration.db-wal
'''SQLite''' — це реляційна база даних, яка дає можливість створювати таблиці, виконувати SQL-запити, зберігати записи, будувати індекси, використовувати транзакції, обмеження, JOIN, представлення й тригери. ORDER BY name;

 order_date TEXT NOT NULL
[[Категорія:Реляційні бази даних]]
== Приклад офлайн-продажів ==

Це означає:

У цьому випадку SQLite зручна, бо не потрібно розгортати сервер бази даних. Для старту достатньо встановити інструмент SQLite або використати мову програмування з підтримкою SQLite.== UPDATE ==

Потім можна читати:
external_id TEXT,

FROM products |- | ORD-000145 | 2026-05-15 | ТОВ “клієнт ERP Плюс” |- | ORD-000146 | 2026-05-16 | ФОП Іваненко |}

SELECT edrpou, COUNT(*) AS cnt

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

FROM products NULL означає відсутність значення.== Первинний ключ ==

amount_cents INTEGER

status TEXT



|- | product | T-00145 | Не знайдено одиницю виміру |- | customer | C-00077 | Порожній ЄДРПОУ |- | contract | D-00031 | Не вказана валюта |}

SQLite і CLI

Це здатна бути корисно після масового видалення або очищення даних. Ознака Тимчасові таблиці корисні для проміжних розрахунків. SQLite здатна бути корисною для:

Приклад: отримати замовлення разом із клієнтами. level

object_id TEXT,

Звичайний файл SQLite сам по собі не виступає як автоматизовано зашифрованим.== SQLite і інтеграції ==

Power BI здатна працювати з даними, які були підготовлені в SQLite, через проміжні інструменти або драйвери. name TEXT NOT NULL

SQLite і дати


[[Категорія:Права доступу]]
[[Категорія:CRM]]
! # Перевірити артикулі. price REAL,

=== Що таке SQLite простими словами? ===
ON products (sku);
== ACID у SQLite ==
== SQLite і логування ==
Типові сценарії:
SELECT *
2026-05-15
 id INTEGER PRIMARY KEY,
 name="ТОВ клієнт ERP Плюс",
SQLite не завжди підходить як головна база ERP, але здатна бути корисною в ERP-екосистемі.== Типові помилки при використанні SQLite ==

<pre>

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

 number TEXT NOT NULL,

FROM customers

* локальна база десктопного застосунку;
* кеш API;
* тестова база;
* імпорт CSV;
* прототип сервісу;
* локальний журнал подій. object_id

migration.db-shm
GROUP BY edrpou
<pre>
|-
| Що таке SQLite? Таблиця

== SQLite і VACUUM ==

! |-
| Який результат? SQLite відрізняється від серверних СУБД. Дата
rows = cursor.fetchall()
|-
| raw_products
| інформаційні дані товарів як у джерелі
|-
| clean_products
| Очищена номенклатура
|-
| map_products
| Відповідність старого й нового коду
|-
| err_products
| Помилки товарів
|-
| ctl_products
| Контрольні суми по товарах
|}

Приклад:

);

* проста установка;
* один файл бази;
* не потрібен сервер;
* технічна підтримка SQL;
* транзакції;
* хороша швидкість для локальних задач;
* зручність для тестів;
* зручність для мобільних застосунків;
* зручність для міграційних утиліт;
* переносимість;
* мінімальне адміністрування. user_id
 id INTEGER PRIMARY KEY,
! object_type TEXT NOT NULL,
<pre>
! );

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

<pre>

* source_customers;
* source_products;
* source_contracts;
* source_balances;
* mapping_tables;
* validation_errors;
* migration_logs;
* control_totals. У цьому режимі SQLite використовує додатковий журнал записів.

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

через EXPLAIN QUERY PLAN користувачі можуть зрозуміти, як виконується запит. Це полегшує сортування й фільтрацію.

FAQ

  • обсяг даних;
  • кількість користувачів;
  • частоту запису;
  • потребу в одночасному доступі;
  • чутливість даних;
  • резервне копіювання;
  • структуру таблиць;
  • індекси;
  • транзакції;
  • міграції структури;
  • спосіб логування;
  • правила очищення;
  • сценарій переходу на серверну СУБД, якщо проєкт виросте. ! * імпорт прайсів;
  • перевірка довідників;
  • формування файлів міграції;
  • локальний довідник контрагентів;
  • логування API;
  • синхронізація складу;
  • підготовка контрольних сум. Але часто краще зберігати сам файл окремо, а в SQLite — шлях або метадані. source_amount
id INTEGER PRIMARY KEY,

Таблиці SQLite

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

View або представлення — це збережений запит. SQLite не має такої серверної моделі користувачів і ролей, як корпоративні СУБД. FROM orders

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

BEGIN TRANSACTION;

Приклад: Приклад:
{| class="wikitable" style="width:100%;"
Приклади:
SQLite-файл потрібно захищати. |-
| Які головні ризики? COMMIT;

* [[SQL]]
* [[ORM]]
* [[ERP]]
* [[K2 ERP]]
* [[API для ERP]]
* [[Інтеграція з BAS]]
* [[Вивантаження даних]]
* [[Міграція даних]]
* [[Power BI]]
* [[BI система]]
* [[Service Desk]]
* [[Аудит дій]]
* [[Права доступу в ERP]]
* [[ERP для складу]]
* [[CRM для продажів]]
* [[ERP в хмарі]]
* [[Впровадження ERP]]
* [[Запуск ERP]]

Але VACUUM здатна займати час, тому його не варто запускати бездумно в активній системі. id INTEGER PRIMARY KEY,
<pre>
GROUP BY customer_id;

== Простий приклад SQLite ==

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

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

SQLite і Git

VALUES ('ТОВ клієнт ERP Плюс', 'info@example.com', '+380XXXXXXXXX');

  • NULL;
  • порожній рядок ;
  • 0;
  • false. Її швидко підключити, швидко перенести, швидко зробити резервну копію, але вона не призначена для всіх сценаріїв великих багатокористувацьких ERP-систем.=== Чи підходить SQLite для ERP? ===
external_id TEXT NOT NULL,

SQLite і ANALYZE

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

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

);

Вбудована реляційна база даних, яка зберігає інформаційні дані в одному файлі. * офлайн-робоче місце;
  • мобільний складський облік;
  • локальний касовий компонент;
  • агент обміну;
  • інструмент імпорту;
  • міграційна утиліта;
  • тестовий стенд;
  • локальний довідник;
  • кеш номенклатури;
  • контроль якості даних.
total_amount REAL

SQLite часто використовують у тестах. id INTEGER PRIMARY KEY,

company.db

'''SELECT''' застосовують, коли потрібно для читання даних. id INTEGER PRIMARY KEY,
 VALUES (old.id, old.price, new.price, datetime('now'));

Приклад:

! У [[K2 ERP]] або проєктах навколо K2 ERP SQLite здатна використовуватися як допоміжна база. SET balance = balance - 80000
Типові сценарії:
[[Категорія:SQLite]]
== SQLite і аналітичні інструменти ==
Приклад даних:
<pre>
Індекси корисні для полів, за якими часто шукають або фільтрують:
|-
| customers
| 12450
| 12450
| 
| 
| OK
|-
| products
| 8200
| 8198
| 
| 
| CHECK
|-
| balances
| 15200
| 15200
| 18200000
| 18200000
| OK
|}

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

2026-05-15 10:30:00

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

Що таке SQLite

SQLite і EXPLAIN QUERY PLAN

VALUES ('USB-C-1M-BLK', 'Кабель USB-C 1 м чорний', 'шт.', 180.00);

object_name TEXT NOT NULL,

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

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

Поширені помилки:

{

Відповідь

конкурентні переваги:

payload TEXT NOT NULL,
name TEXT NOT NULL,
number TEXT,

sqlite3 company.db

name TEXT NOT NULL,

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

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

через зовнішньому ключу можна зрозуміти, якому клієнту належить замовлення. Це критично для цілісності даних. Що зберігає

! | Обмеження одночасного запису, відсутність серверної моделі прав, ризик копіювання файлу й неправильне використання у великих системах.== SQL-запити в SQLite ==

<pre>

* вставляти 100 000 рядків по одному без транзакції;
* після кожного INSERT чекати запису на диск. '''CHECK''' перевіряє значення. ORDER BY total DESC;

__TOC__

* багато користувачів одночасно активно пишуть у базу;
* потрібна велика серверна ERP;
* потрібна складна платформа прав на рівні СУБД;
* потрібна реплікація між серверами;
* потрібне горизонтальне масштабування;
* база має дуже велике навантаження на запис;
* потрібні складні серверні процедури;
* потрібна централізована корпоративна СУБД;
* інформаційні дані мають оброблятися багатьма сервісами одночасно. status
== SQLite і обмеження розміру ==
! Якщо сайт передає замовлення в локальну SQLite-базу, варто створити індекс по зовнішньому номеру:

UPDATE products

== SQLite і десктопні ERP-утиліти ==

== SQLite і міграції структури ==
! name

'''WAL''' означає '''Write-Ahead Logging'''.== SQLite і ERP ==

 currency TEXT NOT NULL DEFAULT 'UAH',
Увімкнути WAL можна так:
! |-
| Де корисна в ERP?== конкурентні переваги SQLite ==

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

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


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

Статуси можуть бути:

Приклад транзакції в міграції

FROM customers
amount REAL NOT NULL CHECK (amount > 0),

SET active = 0

Головне. SQLite — це база даних “в одному файлі”. Поле

Таблиця зберігає інформаційні дані у вигляді рядків і колонок. * створення таблиць;

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

як приклад:

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

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

Який результат правильного використання SQLite?

WHERE id = 10;

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

number TEXT NOT NULL,
email="info@example.com"

</div>

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

ADD COLUMN status TEXT DEFAULT 'new';

* new;
* processing;
* sent;
* error;
* skipped. '''UPDATE''' змінює існуючий запис. Файл можна скопіювати, архівувати, перенести на інший комп’ютер або підключити до іншої програми.== SQLite і перехід на серверну СУБД ==

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

 FOREIGN KEY (customer_id) REFERENCES customers(id)

! WHERE sku = 'USB-C-1M-BLK';
-- багато INSERT
! Принцип
customers id 15
customers name ТОВ “клієнт ERP Плюс”
orders customer_id 15
orders number ORD-000145

Після відновлення зв’язку інформаційні дані передаються в ERP.== WAL-режим SQLite ==

SQLite зручна для очищення даних перед міграцією.


Приклад:

Приклади:

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

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

INSERT INTO customers (name, email, phone)

 id INTEGER PRIMARY KEY,

# Отримати CSV від постачальника. id

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

);

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

  • зберігати суму в копійках як INTEGER;
  • використовувати округлення;
  • контролювати точність у застосунку;
  • не використовувати SQLite як провідний фінансовий контур великої ERP без продуманої моделі. | Для локальних застосунків, мобільних програм, кешу, тестів, прототипів, логів і міграційних утиліт. Приклад:
  1. Створити контрагента. | 180.00

| 1 |- | 2 | COFFEE-1KG | Кава арабіка 1 кг | кг | 720.00 | 1 |}

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

SQLite і грошові суми

SELECT edrpou, COUNT(*) AS cnt

  • INTEGER;
  • REAL;
  • TEXT;
  • BLOB;
  • NULL. # Завантажити в SQLite. object_type
currency TEXT,

Такий запит покаже продажі та реалізація по товарах.== Приклад пошуку дублів == Можна шукати:

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

! CREATE TABLE control_totals (

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

!

ORDER BY сортує результат. CREATE TABLE payments (

Ризики:

payload TEXT NOT NULL,

SQLite добре підходить для навчання SQL. У ньому можна створити таблицю клієнтів:

VACUUM;

Параметр ? оптимізує безпечніше передавати значення в запит. );

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

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

  • локальних довідників;
  • налаштувань;
  • журналів;
  • кешу;
  • імпорту файлів;
  • локальної аналітики;
  • невеликих CRM;
  • складських утиліт;
  • інструментів міграції.== Приклад логів інтеграції ==

CREATE TABLE customers (

"total": 24500

Практичний варіант — зберігати дату в ISO-форматі:

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

виступає як файл: INSERT INTO products (sku, name, unit, price) BEGIN );

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

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


Це інтуїтивно під час аналізу або міграції.
id INTEGER PRIMARY KEY,
  • блокування;
  • пошкодження;
  • нестабільна швидкість;
  • проблеми з одночасним доступом;
  • некоректна робота файлових блокувань. тимчасового збереження вивантажених довідників забезпечується через У контексті K2 ERP, інтеграцій, міграції даних або локальних агентів SQLite здатна використовуватися як проміжне сховище:; так само реалізовано логів інтеграцій, контрольних сум, черг обміну, кешу API, локальних налаштувань, даних для тестування або невеликого автономного модуля. product_name TEXT,
target_count INTEGER,

SEO title: SQLite — вбудована база даних, SQL, файлова БД, транзакції, індекси, ORM і ERP

SEO keywords: SQLite, база даних SQLite, SQL, файлова база даних, вбудована база даних, SQLite приклади, SQLite транзакції, SQLite індекси, SQLite WAL, ORM SQLite, ERP, K2 ERP

</noinclude>
 {{SEO
Шаблон для службового SEO-опису сторінки. 

}}


У PHP SQLite здатна використовуватися для невеликих сайтів, внутрішніх інструментів або прототипів. ! * не ідеальна для багатьох одночасних записів;

  • немає повноцінної серверної моделі користувачів;
  • не найкращий вибір для великої ERP;
  • обмежені функції ERP адміністрування порівняно із серверними СУБД;
  • потрібно уважно працювати з файлами;
  • ризик блокувань;
  • не варто зберігати чутливі інформаційні дані без захисту;
  • не всі функції ERP SQL такі самі, як у великих СУБД. |-

| Чи потрібен сервер? price REAL NOT NULL CHECK (price >= 0)

Для багатокористувацького мережевого сценарію краще серверна СУБД. !== SQLite і імпорт CSV == .schema customers

message TEXT NOT NULL,
Так. | Так, підтримує таблиці, SELECT, INSERT, UPDATE, DELETE, JOIN, індекси, транзакції й обмеження. SELECT *
- Чи підтримує SQL?== Типи даних у SQLite ==

Зовнішній ключ зв’язує одну таблицю з іншою.== Приклад аналітики по продажах ==

Комірник функціонує з планшетом у зоні слабкого інтернету. реліз системи

SQLite зручна для тестування ORM, бо базу швидко створити, очистити й видалити.

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

* NOT NULL;
* UNIQUE;
* CHECK;
* PRIMARY KEY;
* FOREIGN KEY;
* DEFAULT. created_at
ALTER TABLE orders
SQLite часто використовують для обробки CSV-файлів. Але як основна база великої багатокористувацької ERP вона зазвичай не підходить. Приклади локальних даних:

<pre>

* паролі;
* API-ключі;
* банківські реквізити;
* зарплатні інформаційні дані;
* персональні інформаційні дані;
* комерційні прайси;
* конфіденційні договори;
* токени доступу;
* фінансові звіти. |-
| 1
| USB-C-1M-BLK
| Кабель USB-C 1 м чорний
| шт. # Завантажити дебіторку. action TEXT NOT NULL,
);
== SQLite як файлова база даних ==
== Приклад ORM + SQLite ==

Параметризовані запити зменшують ризик SQL-ін’єкцій.

JOIN customers ON customers.id = orders.customer_id;

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

WAL-режим здатна покращити роботу при одночасному читанні й записі. Так. як приклад, замовлення належить клієнту:
критично враховувати:

== Транзакції SQLite ==

UPDATE supplier_balances

Це корисно для пошуку повільних запитів і перевірки, чи застосовується для індекс.<pre>

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

SELECT id, name, email, phone
== SQLite і шифрування ==
{| class="wikitable" style="width:100%;"
== Для чого потрібна SQLite ==
== Приклад: де SQLite недоречна ==

'''INSERT''' додає новий запис. FROM sales

як приклад, при переході з BAS або старої ERP у K2 ERP можна зробити локальну базу:

 "order_id": "WEB-10425",

У застосунках краще вести міграції версіями:
! sku

! CREATE TABLE order_lines (

CREATE TABLE IF NOT EXISTS customers (

COMMIT;

CREATE TABLE audit_log (
== Приклад: де SQLite доречна ==
=== Що таке WAL у SQLite? ===
як приклад:
SELECT *

 name TEXT NOT NULL

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

 id INTEGER PRIMARY KEY,

CREATE TABLE orders (
== DELETE ==
Якщо SQLite застосовується для в бізнес-процесах, потрібно вести аудит. Індекс прискорює пошук. * продажі та реалізація;
* закупівельна діяльність;
* складський облік;
* виробництво;
* фінансовий блок;
* зарплата;
* банк;
* каса;
* Power BI;
* API;
* інтеграції;
* аудит дій.=== Чи безпечна SQLite для конфіденційних даних? ===

== Обмеження SQLite ==
Вона робить:
Тригер — це дія, яка автоматизовано виконується при INSERT, UPDATE або DELETE. PostgreSQL і MySQL — це серверні СУБД, краще пристосовані для багатьох користувачів, великих систем і високого навантаження. object_id

SQLite функціонує як вбудована файлова база без окремого сервера. CREATE TEMP TABLE temp_duplicates AS

Приклад процесу:
{| class="wikitable" style="width:100%;"
PRAGMA journal_mode=WAL;
== Що підготувати перед використанням SQLite у проєкті ==

SQLite добре підходить, якщо:

компанія-користувач хоче запустити основну ERP для 300 користувачів:
CREATE TABLE sync_queue (

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

Приклад аудиту зміни ціни: Щоб SQLite працювала швидше, потрібно: SQLite підтримує принципи ACID. Отримати клієнтів: