Розділ SQL надає виділену базу даних SQLite для кожного проєкту. Ви можете створювати таблиці, індекси та представлення, редагувати дані вручну, писати будь-які запити та отримувати доступ до бази даних безпосередньо з вашого робочого процесу. Це повнофункціональний SQLite з необмеженим синтаксисом: усе, що підтримує SQLite, працює і тут.

База даних SQL зберігається окремо від таблиць у розділі Таблиці. Зміни, внесені в одному місці, не впливають на інше.

Як відкрити

Проєкт → Таблиці → натисніть SQL праворуч від Додати таблицю.

Щоб повернутися до списку таблиць, натисніть стрілку в заголовку сторінки.

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

Структура бази даних

Дерево бази даних відображається праворуч. Воно містить таблиці з їхніми стовпцями та індексами, а також представлення. Кожен стовпець показує свій тип даних, стовпці первинного ключа позначені значком ключа, а індекси відображають атрибут UNIQUE та пов'язані з ними стовпці.

Усі дії, пов'язані зі структурою, доступні з меню вузла: клацніть правою кнопкою миші на вузлі, натисніть значок , який з'являється під час наведення, або скористайтеся кнопкою + над деревом.

Вузол Дії
База даних створити таблицю, створити представлення, оновити, завантажити базу даних
Таблиця відкрити, додати стовпець, додати індекс, перейменувати, DDL, оновити, видалити
Стовпець перейменувати, видалити
Індекс DDL, видалити
Представлення відкрити, DDL, видалити

Створити таблицю. Вкажіть назву таблиці та стовпці: назва, тип, значення за замовчуванням, PK та NOT NULL. Ви можете вибрати тип даних із пропозицій або ввести власний. Якщо ви позначите кілька стовпців як PK, вони утворять складовий первинний ключ.

DDL відображає оператор CREATE об'єкта в консолі. Це корисно для копіювання його структури або відтворення в іншому проєкті.

Кнопки над деревом дозволяють створювати об'єкти, оновлювати базу даних, показувати або приховувати консоль, переглядати DDL вибраної таблиці, завантажувати базу даних або очищати базу даних.

Дані таблиці

Клацніть на таблицю в дереві бази даних, щоб відкрити її дані. Сітка працює так само, як аркуш у розділі Таблиці:

  • Редагуйте клітинку, двічі клацнувши по ній. Натисніть Enter, щоб зберегти, або Esc, щоб скасувати. Значення записується в базу даних негайно.
  • Рядки. Натисніть +, щоб додати порожній рядок, або , щоб видалити вибрані рядки. Клацніть номер рядка в першому стовпці, щоб вибрати його. Використовуйте Shift або Cmd/Ctrl, щоб вибрати кілька рядків.
  • NULL значення відображаються як NULL. Очищення клітинки записує порожній рядок у базу даних. Щоб записати значення NULL, використовуйте запит.
  • Поля WHERE та ORDER BY над сіткою приймають умови SQL та вирази сортування. Введіть вираз і натисніть Enter. Поле ORDER BY має пріоритет над сортуванням, застосованим через меню стовпця.
  • Меню стовпця (значок у заголовку стовпця): сортувати за зростанням або спаданням, або фільтрувати за підрядком.
  • Дані завантажуються під час прокручування, партіями по 100 рядків. Лічильник праворуч показує поточний діапазон і загальну кількість рядків.
  • Представлення доступні лише для читання.

Консоль

Натисніть кнопку </> над деревом бази даних, щоб відкрити консоль, яка включає редактор запитів із підсвічуванням синтаксису та результати запитів.

  • Виконайте запит за допомогою кнопки або Ctrl+Enter (Cmd+Enter на Mac).
  • Ви можете виконувати кілька запитів, розділених ;. Результат відображає рядки, повернуті останнім запитом, який створив дані, разом із загальною кількістю змінених рядків.
  • Помилки SQLite відображаються як є. Під час виконання кількох запитів до повідомлення про помилку додається номер запиту: [2] no such table: ....
  • Обране. Натисніть Додати в обране, щоб зберегти поточний запит під назвою. Збережені запити з'являються як чіпи над редактором: натисніть на один, щоб завантажити запит, або натисніть хрестик, щоб видалити його. Обране зберігається у вашому браузері окремо для кожного проєкту.
  • Текст вашого останнього запиту зберігається між сеансами.

Завантаження та очищення бази даних

Завантажити базу даних завантажує всю базу даних як project_<id>_sql.sqlite3. Ви можете відкрити її будь-яким сумісним із SQLite застосунком, перенести в інший проєкт або використовувати поза Mavibot.

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

Функції калькулятора

Дві функції калькулятора дозволяють отримати доступ до бази даних SQL із вашого робочого процесу. Обидві доступні в пропозиціях редактора та розпізнаються асистентом.

sql(query, params=null, strict=true)

Виконує запит.

Запит Значення, що повертається
Запит із результатом (SELECT, RETURNING, PRAGMA) Список JSON рядків, де кожен рядок представлений як об'єкт: [{"id": 1, "name": "Anna"}, ...]
Запит без результату (INSERT, UPDATE, DELETE) кількість змінених рядків
CREATE, DROP та інші зміни схеми 0
Помилка рядок ERROR: <повідомлення про помилку SQLite>

Приклад:

rows = sql("SELECT name, phone FROM clients WHERE city = ?", [city])
n = sql("UPDATE clients SET status = :s WHERE id = :id", {"s": "vip", "id": client_id})

sql_value(query, params=null, strict=true)

Працює як sql, але повертає одне значення: перший стовпець першого рядка результату.

Якщо рядків немає, результату немає або значення NULL, повертається порожній рядок.

total = sql_value("SELECT count(*) FROM clients")
name = sql_value("SELECT name FROM clients WHERE id = ?", [client_id])

Параметри

params передає значення в запит окремо від тексту запиту: використовуйте масив JSON для плейсхолдерів ? або об'єкт JSON для плейсхолдерів :name. Усередині [...] та {...} змінні записуються як прості імена змінних:

[client_id], а не [#{client_id}].

Передавайте будь-які значення, отримані від клієнта, через params, наприклад, його ім'я, номер телефону або текст повідомлення. Значення, конкатеноване безпосередньо в текст запиту, може змінити сам запит.

Суворий режим

За замовчуванням strict=true: функція приймає рівно один запит і не дозволяє коментарі в тексті запиту. Це запобігає додаванню другого запиту або обрізанню решти оригінального запиту значенням, отриманим із повідомлення клієнта.

Встановіть strict=false, щоб зняти це обмеження, наприклад, під час виконання кількох запитів, розділених ;.

Обмеження

Обмеження Значення
Час виконання одного запиту або пакета запитів 5 секунд
Повернуті рядки до 1,000; додаткові рядки не повертаються
Довжина тексту запиту 64 КБ
Розмір бази даних 200 МБ; після перевищення доступні лише читання та видалення даних

Єдині заборонені команди — ті, що отримують доступ до ресурсів поза базою даних проєкту: ATTACH із шляхом до файлу та VACUUM INTO.

Усе інше, включаючи стандартні VACUUM, PRAGMA та транзакції, підтримується.