SQLite - PRAGMA: Полное руководство для начинающих

Здравствуйте,野心勃勃的数据库爱好者们!今天,我们将踏上一段激动人心的旅程,探索SQLite PRAGMAs的世界。如果您以前从未听说过PRAGMAs,别担心 - 到了这个教程结束时,您将能够像专业人士一样使用它们!

SQLite - PRAGMA

Что такое PRAGMA?

Прежде чем мы углубимся, начнем с основ. В SQLite PRAGMA - это особая команда, которая позволяет нам изменять поведение библиотеки SQLite или запрашивать ее внутреннее состояние. Представьте PRAGMAs как панель управления вашей базой данных SQLite - они позволяют вам настраивать параметры и получать информацию о том, как работает ваша база данных.

Теперь давайте рассмотрим некоторые из наиболее часто используемых PRAGMAs в SQLite.

PRAGMA auto_vacuum

PRAGMA auto_vacuum - это как иметь в базе данных аккуратного соседа по комнате. Он автоматически очищает и организует файл базы данных по мере удаления данных.

PRAGMA auto_vacuum = FULL;

Эта команда устанавливает режим auto_vacuum на FULL, что означает, что SQLite будет стараться держать ваш файл базы данных как можно меньше.

PRAGMA cache_size

PRAGMA cache_size - это как дать вашей базе данных больше памяти. Он определяет, сколько страниц SQLite держит в памяти для быстрого доступа.

PRAGMA cache_size = 10000;

Эта команда устанавливает размер кэша на 10 000 страниц. Больше кэша означает лучшую производительность, но также используется больше памяти.

PRAGMA case_sensitive_like

Этот PRAGMA определяет, чувствителен ли оператор LIKE к регистру. Это как научить вашу базу данных читать с или без очков.

PRAGMA case_sensitive_like = TRUE;

С этим параметром 'Apple' LIKE 'app%' будет ложно, а 'Apple' LIKE 'App%' - истина.

PRAGMA count_changes

PRAGMA count_changes - это как судья для ваших операций с базой данных. Он сообщает вам, сколько строк было изменено INSERT, UPDATE или DELETE оператором.

PRAGMA count_changes = ON;

После настройки этого, когда вы выполните, например, UPDATE оператор, SQLite сообщит вам, сколько строк было затронуто.

PRAGMA database_list

Этот PRAGMA похож на каталог вашей базы данных. Он перечисляет все подключенные базы данных, включая основную и любую другую, к которой вы подключились.

PRAGMA database_list;

Это покажет вам список всех подключенных баз данных, их пути к файлам и их внутренние имена.

PRAGMA encoding

PRAGMA encoding устанавливает или запрашивает текстовое кодирование, используемое базой данных. Это как выбрать, на каком языке будет говорить ваша база данных.

PRAGMA encoding = "UTF-8";

Эта команда устанавливает кодирование базы данных на UTF-8, что является.common выбором для поддержки нескольких языков.

PRAGMA freelist_count

Этот PRAGMA говорит вам, сколькоunused страниц в файле базы данных. Это как проверить, сколько свободного места у вас есть в хранилище.

PRAGMA freelist_count;

Это вернет количествоunused страниц в файле базы данных.

PRAGMA index_info и PRAGMA index_list

Эти PRAGMAs похожи на библиотекаря для ваших индексов базы данных. Они предоставляют информацию о структуре и содержимом ваших индексов.

PRAGMA index_list(table_name);
PRAGMA index_info(index_name);

Первая команда перечисляет все индексы в таблице, а вторая предоставляет детализированную информацию о конкретном индексе.

PRAGMA journal_mode

PRAGMA journal_mode контролирует, как SQLite отслеживает транзакции. Это как выбрать между различными типами систем резервного копирования.

PRAGMA journal_mode = WAL;

Эта команда устанавливает режим журнала на Write-Ahead Logging (WAL), который может улучшить производительность во многих случаях.

PRAGMA max_page_count и PRAGMA page_count

Эти PRAGMAs работают с количеством страниц в вашем файле базы данных. Это как установить и проверить максимальное количество страниц в книге.

PRAGMA max_page_count = 1000000;
PRAGMA page_count;

Первая команда устанавливает максимальное количество страниц, а вторая говорит вам, сколько страниц используется в настоящее время.

PRAGMA page_size

Этот PRAGMA устанавливает или запрашивает размер страницы базы данных. Это как решить, какого размера должна быть каждая страница в вашей книге.

PRAGMA page_size = 4096;

Эта команда устанавливает размер страницы на 4096 байтов, что являетсяcommon выбором.

PRAGMA parser_trace и PRAGMA sql_trace

Эти PRAGMAs похожи на включение режима отладки для вашей базы данных. Они предоставляют детализированную информацию о том, как SQLite обрабатывает ваши команды.

PRAGMA parser_trace = ON;
PRAGMA sql_trace = ON;

Эти команды могут быть очень полезны, когда вы пытаетесь понять, почему определенный запрос не работает так, как expected.

PRAGMA recursive_triggers

Этот PRAGMA контролирует, могут ли триггеры рекурсивно запускать другие триггеры. Это как позволять эффектам domina в вашей базе данных.

PRAGMA recursive_triggers = ON;

С этим параметром триггер может вызвать другой триггер, который может вызвать еще один триггер, и так далее.

PRAGMA schema_version и PRAGMA user_version

Эти PRAGMAs позволяют устанавливать и запрашивать версии для вашей схемы базы данных. Это как метки версий для структуры вашей базы данных.

PRAGMA schema_version;
PRAGMA user_version = 1;

Первая команда запрашивает текущую версию схемы, а вторая устанавливает версию пользователя на 1.

PRAGMA secure_delete

Этот PRAGMA контролирует, насколько тщательно SQLite перезаписывает удаленные данные. Это как выбирать между измельчением ваших документов или просто выбрасыванием их в мусор.

PRAGMA secure_delete = ON;

С этим параметром SQLite будет перезаписывать удаленные данные нулями, делая их сложнее для восстановления.

PRAGMA synchronous

Этот PRAGMA контролирует, как тщательно SQLite записывает данные на диск. Это баланс между безопасностью и скоростью.

PRAGMA synchronous = NORMAL;

Эта команда устанавливает moderate уровень безопасности, балансируя между полной безопасностью (FULL) и максимальной скоростью (OFF).

PRAGMA temp_store и PRAGMA temp_store_directory

Эти PRAGMAs контролируют, где и как SQLite хранит временные данные. Это как выбирать, где положить ваш черновик, когда вы работаете.

PRAGMA temp_store = MEMORY;
PRAGMA temp_store_directory = '/path/to/directory';

Первая команда命令 tells SQLite хранить временные данные в памяти, а вторая указывает каталог для временных файлов.

PRAGMA writable_schema

Этот PRAGMA контролирует, можете ли вы изменять таблицу sqlite_master напрямую. Это как иметь master ключ к структуре вашей базы данных.

PRAGMA writable_schema = ON;

Будьте очень осторожны с этим! Он позволяет вам изменять fundamental структуру вашей базы данных, что может быть опасно, если не сделать это правильно.

Вот таблица, резюмирующая все PRAGMAs, которые мы обсуждали:

PRAGMA Описание
auto_vacuum Контролирует автоматическое vacuming базы данных
cache_size Устанавливает количество страниц, которые нужно держать в памяти
case_sensitive_like Контролирует чувствительность оператора LIKE к регистру
count_changes Отчет о количестве строк, измененных операциями
database_list Перечисляет подключенные базы данных
encoding Устанавливает или запрашивает текстовое кодирование базы данных
freelist_count Отчет о количествеunused страниц в файле базы данных
index_info Предоставляет информацию о конкретном индексе
index_list Перечисляет все индексы в таблице
journal_mode Контролирует, как отслеживаются транзакции
max_page_count Устанавливает максимальное количество страниц в базе данных
page_count Отчет о текущем количестве страниц в базе данных
page_size Устанавливает или запрашивает размер страницы базы данных
parser_trace Включает детализированную информацию о парсинге
recursive_triggers Позволяет триггерам рекурсивно запускать другие триггеры
schema_version Устанавливает или запрашивает версию схемы
secure_delete Контролирует, насколько тщательно перезаписываются удаленные данные
sql_trace Включает детализированную информацию о выполнении SQL
synchronous Контролирует, как тщательно данные записываются на диск
temp_store Контролирует, где хранятся временные данные
temp_store_directory Указывает каталог для временных файлов
user_version Устанавливает или запрашивает пользовательскую версию
writable_schema Позволяет прямое изменение таблицы sqlite_master

И вот и все! Вы теперь хорошо подготовлены, чтобы начать экспериментировать с PRAGMAs SQLite. Помните, эти мощные инструменты могут значительно повлиять на поведение и производительность вашей базы данных, поэтому всегда тщательно тестируйте их перед использованием в производственной среде. Счастливого кодирования!

Credits: Image by storyset