Академический Документы
Профессиональный Документы
Культура Документы
1.Начало работы
Проект SQLite предоставляет простую программу командной строки с именем sqlite3 (или sqlite3.exe в Windows),
которая позволяет пользователю вручную вводить и выполнять операторы SQL для базы данных SQLite или для
архива ZIP . В этом документе содержится краткое введение в использование программы sqlite3 .
Запустите программу sqlite3 , набрав «sqlite3» в командной строке, при желании за которым следует имя файла,
содержащего базу данных SQLite (или ZIP-архив ). Если названный файл не существует, новый файл базы данных с
данным именем будет создан автоматически. Если в командной строке не указан файл базы данных, создается
временная база данных, которая удаляется при выходе из программы sqlite3.
При запуске программа sqlite3 покажет краткое баннерное сообщение, а затем предложит вам ввести SQL. Введите
операторы SQL (заканчивающиеся точкой с запятой), нажмите «Enter», и SQL будет выполнен.
Например,чтобы создать новую базу данных SQLite с именем "ex1" и одной таблицей с именем "tbl1",вы можете
сделать это:
$ sqlite3 ex1
hello!|10
goodbye|20
sqlite>
Завершите программу sqlite3,набрав в системе символ End-Of-File (обычно это Controll-D).Используйте символ
прерывания (обычно Controll-C)для остановки долгосрочного SQL-оператора.
Убедитесь,что в конце каждой команды SQL вы напечатали точку с запятой! Программа sqlite3 ищет точку с
запятой,чтобы узнать,когда Ваша команда SQL будет завершена.Если Вы опустите точку с запятой,sqlite3 даст Вам
запрос на продолжение и будет ждать,пока Вы не введете больше текста для добавления в текущую команду SQL.Эта
функция позволяет вводить команды SQL,которые охватывают несколько строк.Например:
...> f2 text,
...> f3 real
...> );
sqlite>
sqlite>
В приведенном выше примере открывается и используется файл БД с именем "ex1.db".Файл "ex1.db" создается,если
он ранее не существовал.Возможно,вы захотите использовать полное имя,чтобы убедиться,что файл находится в
каталоге,в котором,как вы думаете,он находится.Используйте прямые косые черты в качестве символа разделителя
каталогов.Другими словами,используйте "c:/work/ex1.db",а не "c:\work\ex1.db".
Кроме того,вы можете создать новую БД,используя временное хранилище по умолчанию,а затем сохранить эту БД в
файл на диске с помощью команды ".save":
sqlite>
Будьте осторожны при использовании команды ".save",так как она перезапишет все существующие файлы БД с таким
же именем без запроса подтверждения.Как и в случае с командой ".open",во избежание двусмысленности можно
использовать полное имя пути с разделителями каталогов forward-slash.
Для списка доступных точечных команд можно ввести ".help" без аргументов.Или введите ".help TOPIC" для получения
подробной информации о TOPIC.Далее следует список доступных точечных команд:
sqlite> .help
.clone NEWDB Clone data into NEWDB from the existing database
.once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE
.width NUM1 NUM2 ... Set minimum column widths for columnar output
sqlite>
Точечные команды интерпретируются программой командной строки sqlite3.exe, а не самим SQLite. Таким образом,
ни одна из точечных команд не будет работать в качестве аргумента для интерфейсов SQLite, таких как sqlite3_prepare
() или sqlite3_exec () .
ascii
box
csv
column
html
insert
json
line
list
markdown
quote
table
tabs
tcl
Вы можете использовать точечную команду ".mode" для переключения между этими форматами вывода.По
умолчанию используется режим вывода "список".В режиме списка каждая строка результата запроса записывается в
одну строку,а каждый столбец в этой строке разделяется определенной строкой-разделителем.По умолчанию
разделителем является символ трубы ("|").Режим списка особенно полезен,когда вы собираетесь отправить результат
запроса в другую программу (например,AWK)для дополнительной обработки.
hello|10
goodbye|20
sqlite>
hello, 10
goodbye, 20
sqlite>
В режиме "кавычки" вывод форматируется как SQL-литералы.Строки заключены в одинарные кавычки,а внутренние
одинарные кавычки экранированы удвоением.Капли выводятся в шестнадцатеричной блочной литературной
нотации (Ex:x'abcd').Цифры отображаются в виде ASCII текста,а NULL значения отображаются в виде "NULL".Все
столбцы отделены друг от друга запятой (или любым другим альтернативным символом,выбранным с помощью
".разделителя").
'hello',10
'goodbye',20
sqlite>
В режиме "строка" каждый столбец в строке БД отображается на строке сам по себе.Каждая строка состоит из
названия столбца,знака равенства и данных столбца.Последующие записи разделены пустой строкой.Приведем
пример вывода в "строчном" режиме:
sqlite> .mode line
one = hello
two = 10
one = goodbye
two = 20
sqlite>
one two
-------- ---
hello 10
goodbye 20
sqlite>
sqlite> .width 12 -6
one two
------------ ------
hello! 10
goodbye 20
sqlite>
Ширина 0 означает,что ширина столбца выбирается автоматически.Неуказанная ширина колонок становится равной
нулю.Следовательно,команда ".width" без аргументов обнуляет ширину всех колонок и,следовательно,приводит к
тому,что ширина всех колонок определяется автоматически.
sqlite> .width
| one | two |
|---------|-----|
| hello! | 10 |
| goodbye | 20 |
+---------+-----+
| one | two |
+---------+-----+
| hello! | 10 |
| goodbye | 20 |
+---------+-----+
┌─────────┬─────┐
│ one │ two │
├─────────┼─────┤
│ hello! │ 10 │
│ goodbye │ 20 │
└─────────┴─────┘
sqlite>
Другим полезным режимом вывода является "вставка".В режиме вставки вывод форматируется как SQL INSERT
операторы.Используйте режим вставки для генерации текста,который впоследствии может быть использован для
ввода данных в другую базу данных.
При указании режима вставки необходимо указать дополнительный аргумент-имя таблицы,в которую будет
вставлена таблица.Например:
sqlite> .mode insert new_table
sqlite>
Другие режимы вывода включают "html","json" и "tcl".Попробуйте их самостоятельно,чтобы увидеть,что они делают.
sqlite> .tables
tbl1
tbl2
sqlite>
Команда ".tables" аналогична установке режима списка,после чего выполняется следующий запрос:
ORDER BY 1
Но команда ".tables" делает больше. Он запрашивает таблицу sqlite_schema для всех подключенных баз данных, а не
только для первичной базы данных. И он размещает свой вывод в аккуратных столбцах.
Команда ".индексы" работает аналогичным образом,чтобы перечислить все индексы.Если команде ".индексы" задан
аргумент,который является именем таблицы,то она показывает только индексы на этой таблице.
Команда ".schema" показывает полную схему для БД или для одной таблицы,если указан необязательный аргумент
"tablename":
sqlite> .schema
f2 text,
f3 real
f2 text,
f3 real
sqlite>
Команда ".schema" приблизительно аналогична режиму задания списка,после чего вводится следующий запрос:
Как и в случае с «.tables», команда «.schema» показывает схему для всех подключенных баз данных. Если вы хотите
увидеть схему только для одной базы данных (возможно, «основной»), вы можете добавить аргумент в «.schema»,
чтобы ограничить ее вывод:
Команда ".schema" может быть дополнена опцией "--indent",в этом случае она пытается переформатировать
различные CREATE утверждения схемы так,чтобы они были более легко читаемы людьми.
Команда ".databases" показывает список всех баз данных, открытых в текущем соединении. Всегда будет минимум 2.
Первая - «основная», исходная база данных открыта. Вторая - это «temp», база данных, используемая для временных
таблиц. Могут быть указаны дополнительные базы данных для баз данных, подключенных с помощью оператора
ATTACH. Первый столбец вывода - это имя, с которым связана база данных, а второй столбец результата - имя файла
внешнего файла. Может быть третий столбец результатов, который будет либо «r / o», либо «r / w», в зависимости от
того, является ли файл базы данных доступным только для чтения или для чтения-записи. И может быть четвертый
столбец результатов, показывающий результат sqlite3_txn_state () для этого файла базы данных.
sqlite> .databases
Точка-команда ".fulllschema" работает как команда ".schema" в том,что она отображает всю схему БД.Но ".fullschema"
включает также дамп таблицы статистики "sqlite_stat1","sqlite_stat3" и "sqlite_stat4",если они существуют.Команда
".fullschema" обычно предоставляет всю информацию,необходимую для точного воссоздания плана запроса для
конкретного запроса.При сообщении о подозрительных проблемах с планировщиком запросов SQLite команде
разработчиков SQLite,разработчикам предлагается предоставить полный вывод ".fulllschema" как часть отчета о
проблеме.Обратите внимание,что таблицы sqlite_stat3 и sqlite_stat4 содержат образцы индексных записей и поэтому
могут содержать конфиденциальные данные,поэтому не посылайте вывод ".fulllschema" проприетарной базы данных
по публичному каналу.
7.Перенаправление ввода/вывода
sqlite> .separator |
sqlite> .exit
$ cat test_file_1.txt
hello|10
goodbye|20
Если первый символ имени файла ".output" или ".once" является символом трубы ("|"),то остальные символы
рассматриваются как команда,и выходные данные отправляются в эту команду.Это облегчает передачу результатов
запроса в какой-то другой процесс.Например,команда "open -f" на Mac открывает текстовый редактор для
отображения содержимого,которое он читает со стандартного входа.Таким образом,чтобы увидеть результаты
запроса в текстовом редакторе,можно набирать текст:
Если команды ".output" или ".once" имеют аргумент "-e",то вывод собирается во временный файл и в этом текстовом
файле вызывается системный текстовый редактор.Таким образом,команда ".once -e" достигает того же результата,что
и ".once '|open -f'",но с пользой переносится на все системы.
Если команды ".output" или ".once" имеют аргумент "-x",который заставляет их накапливать вывод в виде Comma-
разделенных значений (CSV)во временном файле,то вызовите системную утилиту по умолчанию для просмотра CSV-
файлов (обычно это программа для работы с электронными таблицами)на результат.Это быстрый способ отправки
результата запроса в электронную таблицу для удобства просмотра:
sqlite> .once -x
Команда ".read" временно прекращает чтение с клавиатуры и вместо этого берет данные из названного файла.По
достижении конца файла ввод возвращается к клавиатуре.Файл сценария может содержать команды с точками,как и
обычный интерактивный ввод.
Если аргумент ".read" начинается с символа "|",то вместо того,чтобы открыть аргумент как файл,он запускает аргумент
(без ведущего "|")как команду,а затем использует вывод этой команды в качестве входа.Таким образом,если у вас есть
сценарий,который генерирует SQL,вы можете выполнить этот SQL напрямую,используя команду,подобную
следующей:
SQL-функция readfile(X)читает все содержимое файла с именем X и возвращает это содержимое в виде BLOB.Это
может быть использовано для загрузки содержимого в таблицу.Например:
...> VALUES('icon','jpeg',readfile('icon.jpg'));
Обратите внимание, что функции readfile (X) и writefile (X, Y) являются функциями расширения и не встроены в
базовую библиотеку SQLite. Эти процедуры доступны в виде загружаемых расширений в исходном файле ext / misc /
fileio.c в репозиториях исходного кода SQLite .
7.4.SQL-функция edit()
В CLI есть еще одна встроенная SQL-функция под названием edit().Функция edit()принимает один или два
аргумента.Первым аргументом является значение-обычно это большая многострочная строка,которую нужно
отредактировать.Второй аргумент-имя текстового редактора.Если второй аргумент опущен,то используется
переменная окружения VISUAL.Функция edit()записывает свой первый аргумент во временный файл,вызывает
редактор во временном файле,перечитывает файл обратно в память после завершения редактирования,затем
возвращает отредактированный текст.
Функция edit()может быть использована для внесения изменений в большие текстовые значения.Например:
В данном примере содержимое поля docs.body для записи,где docs.name-это "report-15",будет отправлено в
редактор.После возврата редактора результат будет записан обратно в поле docs.body.
Программа редактирования также может быть использована в качестве программы просмотра,просто игнорируя
возвращаемое значение.Например,чтобы просто посмотреть на изображение выше,можно запустить программу:
Обратите внимание,что перед выполнением команды ".импорт" необходимо установить "режим" на "csv".Это
необходимо для того,чтобы оболочка командной строки не пыталась интерпретировать текст входного файла как
какой-то другой формат.
Есть два дела,которые нужно рассмотреть:(1)Таблицы "tab1" ранее не существовало и (2)таблица "tab1" уже
существует.
7.6.Экспорт в CSV
Чтобы экспортировать таблицу SQLite (или часть таблицы)в формате CSV,просто установите "режим" в "csv",а затем
выполните запрос на извлечение нужных строк таблицы.
sqlite> .headers on
В приведенном выше примере строка ".headers on" заставляет метки столбцов печататься в качестве первой строки
вывода.Это означает,что первая строка результирующего CSV-файла будет содержать метки столбцов.Если метки
столбцов не нужны,вместо этого установите ".headers off".(Настройка ".headers off" используется по умолчанию и
может быть опущена,если заголовки не были включены ранее).
Строка "...один разFILENAME"заставляет весь вывод запроса идти в указанный файл, а не выводить его на консоль. В
приведенном выше примере эта строка вызывает запись содержимого CSV в файл с именем" C: /work/dataout.csv ".
Последняя строка примера (".system c:/work/dataout.csv")имеет тот же эффект,что и двойной щелчок на файле
c:/work/dataout.csv в окнах.Обычно это вызовет программу электронной таблицы для отображения CSV-файла.
7.6.1.Экспорт в Excel
Для упрощения экспорта в электронную таблицу CLI предоставляет команду ".excel",которая захватывает выходные
данные одного запроса и отправляет их в программу электронной таблицы по умолчанию на хост-
компьютере.Используйте ее таким образом:
sqlite> .excel
Команда выше записывает вывод запроса в виде CSV во временный файл,вызывает обработчик по умолчанию для
CSV-файлов (обычно это предпочтительная программа для работы с таблицами,например,Excel или LibreOffice),затем
удаляет временный файл.По сути,это краткосрочный метод выполнения последовательности команд ".csv",".once" и
".system",описанный выше.
Команда ".excel" на самом деле является псевдонимом для ".once -x".Опция -x в .once приводит к записи результатов в
виде CSV во временный файл,который называется суффиксом ".csv",а затем вызывает системный обработчик по
умолчанию для CSV-файлов.
Также существует команда ".once -e",которая работает аналогичным образом,за исключением того,что она называет
временный файл суффиксом ".txt" таким образом,что вместо стандартной электронной таблицы будет вызван
текстовый редактор по умолчанию для системы.
Архив ZIP представляется как база данных,содержащая одну таблицу со следующей схемой:
);
Так,например,если вы хотите увидеть эффективность сжатия (выраженную как размер сжатого содержимого
относительно исходного размера несжатого файла)для всех файлов в архиве ZIP,отсортированных от наиболее
сжатого к наименее сжатому,вы можете выполнить следующий запрос:
sqlite> .schema
Если при открытии файла клиент командной строки обнаруживает, что файл представляет собой ZIP-архив, а не базу
данных SQLite, он фактически открывает базу данных в памяти, а затем в этой базе данных в памяти создает
экземпляр виртуальной таблицы Zipfile, которая прилагается к ZIP-архиву.
Специальная обработка для открытия ZIP-архивов - это уловка оболочки командной строки, а не основной
библиотеки SQLite. Поэтому, если вы хотите открыть ZIP-архив в качестве базы данных в своем приложении, вам
нужно будет активировать модуль виртуальной таблицы Zipfile, а затем выполнить соответствующий оператор
CREATE VIRTUAL TABLE .
В результате будет создан файл с именем ex1.dump.gz , содержащий все необходимое для восстановления базы
данных позже или на другом компьютере. Чтобы восстановить базу данных, просто введите:
Текстовый формат является чистым SQL,поэтому вы также можете использовать команду .dump для экспорта базы
данных SQLite в другие популярные движки баз данных SQL.Вот так:
$ createdb ex2
Если команда ".восстановить" восстанавливает одну или несколько строк,которые она не может атрибутировать ни к
одной из таблиц БД,то выходной скрипт создает таблицу "lost_and_found" для хранения осиротевших строк.Схема
таблицы lost_and_found выглядит следующим образом:
);
Таблица "lost_and_found" содержит по одной строке для каждой осиротевшей строки,восстановленной из БД.Кроме
того,для каждой восстановленной записи индекса есть одна строка,которая не может быть отнесена ни к одному SQL-
индексу.Это связано с тем,что в базе данных SQLite используется один и тот же формат для хранения записей индекса
SQL и записей таблицы БЕЗ РОУИДА.
Column Contents
rootpgno Несмотря на то,что атрибуция строки к определенной таблице БД может быть невозможна,она может
быть частью древовидной структуры в файле БД.В этом случае в данной колонке хранится номер
корневой страницы этой древовидной структуры.Или,если страница,на которой была найдена
строка,не является частью древовидной структуры,в данной колонке хранится копия значения в
колонке "pgno"-номер страницы,на которой была найдена строка.Во многих,хотя и не во всех
случаях,случаях все строки в таблице lost_and_found с одинаковым значением в этой колонке
принадлежат одной и той же таблице.
id Если строка берется из таблицы БЕЗ КОЛИЧЕСТВА,то этот столбец содержит NULL.В противном случае
она содержит 64-битное целое значение rowid для строки.
c0,c1,c2... В этих столбцах хранятся значения для каждого столбца строки.Команда ".восстановить" создает
таблицу lost_and_found с таким количеством столбцов,которое требуется для самой длинной
осиротевшей строки.
Если восстановленная схема БД уже содержит таблицу с именем "lost_and_found",то команда ".recovery" использует
имя "lost_and_found0".Если имя "lost_and_found0" также уже взято,"lost_and_found1" и т.п.Имя по умолчанию
"lost_and_found" можно переопределить,вызвав ".recovery" с помощью переключателя --lost-and-
found.Например,чтобы выходной скрипт вызвал таблицу "orphaned_rows":
sqlite> .recover --lost-and-found orphaned_rows
11.Загрузка расширений
Вы можете добавить новые пользовательские определяемые приложением функции SQL , последовательности
сортировки , виртуальные таблицы и VFS в оболочку командной строки во время выполнения с помощью команды
«.load». Сначала преобразуйте расширение в DLL или общую библиотеку (как описано в документе « Загружаемые
расширения времени выполнения» ), затем введите:
Обратите внимание,что SQLite автоматически добавляет соответствующий суффикс расширения (".dll" в окнах,".dylib"
в Mac,".so" в большинстве других unix)к имени файла расширения.Обычно рекомендуется указывать полное имя
расширения.
SQLite вычисляет точку входа для расширения на основе имени файла расширения.Чтобы переопределить этот
выбор,просто добавьте имя расширения в качестве второго аргумента в команду ".load".
Исходный код нескольких полезных расширений можно найти в подкаталоге ext / misc дерева исходных текстов
SQLite. Вы можете использовать эти расширения как есть или в качестве основы для создания ваших собственных
расширений для удовлетворения ваших конкретных потребностей.
Схема базы данных (в таблице sqlite_schema ) обычно не включается в хэш, но может быть добавлена с помощью
параметра «--schema».
Команда ".sha3sum" принимает единственный необязательный аргумент, который является шаблоном LIKE . Если этот
параметр присутствует, будут хешироваться только таблицы, имена которых соответствуют шаблону LIKE .
Команда «.sha3sum» реализована с помощью функции расширения «sha3_query ()», которая включена в оболочку
командной строки.
);
Команда .selftest читает строки таблицы selftest в порядке selftest.tno.Для каждой строки 'memo' она записывает текст
в 'cmd'.Для каждой строки 'run' она запускает текст 'cmd' в виде SQL и сравнивает результат со значением в 'ans',а
также выводит сообщение об ошибке,если результаты отличаются.
Команда ".selftest --init" создает таблицу самотестирования, если она еще не существует, а затем добавляет записи,
которые проверяют хэш SHA3 содержимого всех таблиц. Последующие запуски ".selftest" будут проверять, что база
данных не была изменена каким-либо образом. Для генерирует тесты , чтобы убедиться , что подмножество таблиц
неизменны, просто запустите «.selftest --init» , то УДАЛИТЬ самотестирования строки, относящиеся к таблицам,
которые не являются постоянными.
Так же как и опция команды,каждый вызов ".ar" может указывать одну или несколько опций
модификатора.Некоторые опции модификаторов требуют аргумента,некоторые нет.Доступны следующие опции
модификаторов:
-файл --append Как и --file, используйте файл FILE в качестве архива, но откройте файл с помощью apndvfs
ФАЙЛ VFS, чтобы архив был добавлен в конец FILE, если FILE уже существует.
-C DIR - каталог Если указано,интерпретируйте все относительные пути как относительные к DIR,а не к
DIR текущей рабочей директории.
-n --dryrun Покажите SQL,который будет запущен для выполнения операции архивации,но на самом
деле ничего не меняйте.
Для использования в командной строке добавьте опции короткой командной строки сразу после "-A",без
промежутка времени.Все последующие аргументы считаются частью команды .archive.Например,следующие команды
эквивалентны:
В качестве альтернативы первым аргументом после ".ar" может быть конкатенация короткой формы всех требуемых
опций (без символов "-").В этом случае аргументы требуемых опций читаются из следующей командной строки,а
любые оставшиеся слова считаются командными аргументами.Например:
.ar --list
Для команды --insert все перечисленные файлы вставляются в архив.Для команды --update файлы вставляются только
в том случае,если они ранее не существовали в архиве,или если их "mtime" или "mode" отличается от того,что
находится в архиве в данный момент.
Узел совместимости:До версии SQLite 3.28.0 (2019-04-16)поддерживалась только опция --update,но эта опция
работала как --insert в том,что она всегда переустанавливала каждый файл,независимо от того,изменился он или нет.
Операторы SQL, используемые для реализации операций с архивом SQLite, используют различные загружаемые
расширения . Все эти расширения доступны в дереве исходных текстов SQLite в подпапке ext / misc / . Расширения,
необходимые для полной поддержки архива SQLite, включают:
1. fileio.c - это расширение добавляет функции SQL readfile () и writefile () для чтения и записи содержимого из
файлов на диске. Расширение fileio.c также включает возвращающую табличное значение функцию fsdir () для
перечисления содержимого каталога и функцию lsname () для преобразования числовых целых чисел st_mode
из системного вызова stat () в удобочитаемые строки по образцу " ls -l "команда.
2. sqlar.c - это расширение добавляет функции sqlar_compress () и sqlar_uncompress (), которые необходимы для
сжатия и распаковки содержимого файла при его вставке и извлечении из архива SQLite.
3. zipfile.c - Это расширение реализует возвращающую табличное значение функцию «zipfile (FILE)», которая
используется для чтения ZIP-архивов. Это расширение необходимо только при чтении архивов ZIP вместо
архивов SQLite.
4. appendvfs.c - это расширение реализует новую VFS, которая позволяет добавлять базу данных SQLite к другому
файлу, например к исполняемому. Это расширение необходимо, только если для команды .archive используется
опция --append.
15.Параметры SQL
SQLite позволяет связанным параметрам появляться в операторе SQL везде, где разрешено буквальное значение.
Значения для этих параметров устанавливаются с помощью семейства API sqlite3_bind _... () .
Эта оболочка командной строки оставляет безымянные параметры не связанными,что означает,что они будут иметь
значение SQL NULL,но именованным параметрам могут быть присвоены значения.Если существует таблица TEMP с
именем "sqlite_parameters",то есть такая схема:
value ANY
) WITHOUT ROWID;
И если в таблице есть запись,в которой столбец ключа точно совпадает с именем параметра (включая начальный
символ "?","$",":" или "@"),то параметру присваивается значение столбца значения.Если запись отсутствует,то по
умолчанию параметру присваивается значение NULL.
Команда ".параметр" существует для упрощения управления этой таблицей.Команда ".параметр init" (часто
сокращенно просто ".параметр init")создает таблицу temp.sqlite_parameters,если она еще не существует.Команда
".параметр init" показывает все записи в таблице temp.sqlite_parameters.Команда ".param clear" выводит таблицу
temp.sqlite_parameters.Команды ".параметр set KEY VALUE" и ".параметр unset KEY" создают или удаляют записи из
таблицы temp.sqlite_parameters.
Таблица temp.sqlite_parameters предоставляет значения только для параметров в оболочке командной строки.
Таблица temp.sqlite_parameter не влияет на запросы, которые выполняются напрямую с помощью SQLite C-language
API. Ожидается, что отдельные приложения будут реализовывать свои собственные привязки параметров. Вы можете
найти «sqlite_parameters» в исходном коде оболочки командной строки, чтобы увидеть, как оболочка командной
строки выполняет привязку параметров, и использовать это как подсказку о том, как реализовать это самостоятельно.
sqlite> .expert
sqlite> SELECT * FROM x1 WHERE a=? AND b>?; - Проанализируйте этот ВЫБОР
sqlite> .expert
English
sqlite> SELECT * FROM x1 WHERE a=? AND b>?; - Повторно проанализируйте тот же ВЫБОР
В приведенном выше примере пользователь создает схему базы данных (одна таблица - «x1»), а затем использует
команду «.expert» для анализа запроса, в данном случае «SELECT * FROM x1 WHERE a =? AND b>? ". Инструмент
оболочки рекомендует пользователю создать новый индекс (индекс «x1_idx_000123a7») и вывести план, который
будет использовать запрос, в формате EXPLAIN QUERY PLAN . Затем пользователь создает индекс с эквивалентной
схемой и снова запускает анализ того же запроса. На этот раз инструмент оболочки не рекомендует никаких новых
индексов и выводит план, который SQLite будет использовать для запроса с учетом существующих индексов.
Option Purpose
--sample По умолчанию команда «.expert» рекомендует индексы только на основе запроса и схемы базы
ПРОЦЕНТ данных. Это похоже на то, как планировщик запросов SQLite выбирает индексы для запросов, если
пользователь не выполнил команду ANALYZE в базе данных для генерации статистики
распределения данных.
Если этот параметр передан ненулевым аргументом,то команда ".эксперт" генерирует аналогичную
статистику распределения данных по всем рассматриваемым индексам на основе PERCENT
процентов строк,хранящихся в настоящее время в каждой таблице БД.Для БД с необычными
распределениями данных это может привести к улучшению рекомендаций по индексам,особенно
если приложение намерено запустить ANALYZE.
Для небольших баз данных и современных процессоров,как правило,нет причин не сдавать "-
образец 100".Однако сбор статистики распределения данных может быть дорогостоящим для
больших таблиц баз данных.Если операция слишком медленная,попробуйте передать меньшее
значение для опции "-образца".
Функциональность, описанная в этом разделе, может быть интегрирована в другие приложения или инструменты с
использованием кода расширения эксперта SQLite .
<tr><td>hello<td>10
<tr><td>goodbye<td>20
sh configure; make
nmake /f Makefile.msc
Для правильной работы команды .archive сделайте копию исходного кода zlib в подкаталог compat / zlib дерева
исходных текстов и скомпилируйте следующим образом:
20.1.Самодельные конструкции
Исходный код интерфейса командной строки sqlite3 находится в одном файле с именем «shell.c». Исходный файл
shell.c создается из других источников, но большую часть кода для shell.c можно найти в src / shell.c.in . (Восстановите
shell.c, набрав «make shell.c» из канонического исходного дерева.) Скомпилируйте файл shell.c (вместе с исходным
кодом библиотеки sqlite3 ), чтобы сгенерировать исполняемый файл. Например:
-DSQLITE_THREADSAFE=0
-DSQLITE_ENABLE_EXPLAIN_COMMENTS
-DSQLITE_HAVE_ZLIB
-DSQLITE_INTROSPECTION_PRAGMAS
-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
-DSQLITE_ENABLE_STMTVTAB
-DSQLITE_ENABLE_DBPAGE_VTAB
-DSQLITE_ENABLE_DBSTAT_VTAB
-DSQLITE_ENABLE_OFFSET_SQL_FUNC
-DSQLITE_ENABLE_JSON1
-DSQLITE_ENABLE_RTREE
-DSQLITE_ENABLE_FTS4
-DSQLITE_ENABLE_FTS5
https://sqlite.org/cli.html
Search...
Top
Help us Improve Translation Privacy Policy