Вы находитесь на странице: 1из 18

SQLite

3.38 Русский / CLI

Оболочка командной строки для SQLite


1.Начало работы
2.Дважды щелкните Startup On Windows
3.Специальные команды sqlite3 (точечные команды)
4.Правила для "точечных команд"
5.Изменение форматов вывода
6.Запрос схемы базы данных
7.Перенаправление ввода/вывода
7.1.Запись результатов в файл
7.2.Чтение SQL из файла
7.3.Функции ввода/вывода файлов
7.4.SQL-функция edit()
7.5.Импорт файлов CSV
7.6.Экспорт в CSV
7.6.1.Экспорт в Excel
8.Доступ к ZIP-архивам как к файлам базы данных
8.1.Как реализован доступ к архиву ZIP
9.Преобразование всей базы данных в текстовый файл ASCII
10.Восстановление данных из поврежденной базы данных
11.Загрузка расширений
12.Криптографические хэши содержимого базы данных
13.Самотестирование содержания базы данных
14.Поддержка архивации SQLite
14.1.Команда создания архива SQLite
14.2.Команда извлечения архива SQLite
14.3.Команда SQLite Archive List
14.4.Команды вставки и обновления архива SQLite
14.5.Операции над архивами ZIP
14.6.SQL,используемый для реализации операций архивирования SQLite
15.Параметры SQL
16.Рекомендации по индексам (SQLite Expert)
17.Другие точечные команды
18.Использование sqlite3 в сценарии оболочки
19.Завершение команд командной оболочки
20.Компиляция программы sqlite3 из исходных текстов
20.1.Самодельные конструкции

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

SQLite version 3.28.0 2019-03-02 15:25:24

Enter ".help" for usage hints.

sqlite> create table tbl1(one varchar(10), two smallint);

sqlite> insert into tbl1 values('hello!',10);

sqlite> insert into tbl1 values('goodbye', 20);

sqlite> select * from tbl1;

hello!|10

goodbye|20

sqlite>

Завершите программу sqlite3,набрав в системе символ End-Of-File (обычно это Controll-D).Используйте символ
прерывания (обычно Controll-C)для остановки долгосрочного SQL-оператора.
Убедитесь,что в конце каждой команды SQL вы напечатали точку с запятой! Программа sqlite3 ищет точку с
запятой,чтобы узнать,когда Ваша команда SQL будет завершена.Если Вы опустите точку с запятой,sqlite3 даст Вам
запрос на продолжение и будет ждать,пока Вы не введете больше текста для добавления в текущую команду SQL.Эта
функция позволяет вводить команды SQL,которые охватывают несколько строк.Например:

sqlite> CREATE TABLE tbl2 (

...> f1 varchar(30) primary key,

...> f2 text,

...> f3 real

...> );

sqlite>

2.Дважды щелкните Startup On Windows


Пользователи Windows могут дважды щелкнуть значок sqlite3.exe, чтобы оболочка командной строки открыла окно
терминала с запущенным SQLite. Однако, поскольку двойной щелчок запускает sqlite3.exe без аргументов командной
строки, файл базы данных не будет указан, поэтому SQLite будет использовать временную базу данных, которая
удаляется при выходе из сеанса. Чтобы использовать файл постоянного диска в качестве базы данных, введите
команду «.open» сразу после запуска окна терминала:

SQLite version 3.28.0 2019-03-02 15:25:24

Enter ".help" for usage hints.

Connected to a transient in-memory database.

Use ".open FILENAME" to reopen on a persistent database.

sqlite> .open ex1.db

sqlite>

В приведенном выше примере открывается и используется файл БД с именем "ex1.db".Файл "ex1.db" создается,если
он ранее не существовал.Возможно,вы захотите использовать полное имя,чтобы убедиться,что файл находится в
каталоге,в котором,как вы думаете,он находится.Используйте прямые косые черты в качестве символа разделителя
каталогов.Другими словами,используйте "c:/work/ex1.db",а не "c:\work\ex1.db".

Кроме того,вы можете создать новую БД,используя временное хранилище по умолчанию,а затем сохранить эту БД в
файл на диске с помощью команды ".save":

SQLite version 3.28.0 2019-03-02 15:25:24

Enter ".help" for usage hints.

Connected to a transient in-memory database.

Use ".open FILENAME" to reopen on a persistent database.

sqlite> ... many SQL commands omitted ...

sqlite> .save ex1.db

sqlite>

Будьте осторожны при использовании команды ".save",так как она перезапишет все существующие файлы БД с таким
же именем без запроса подтверждения.Как и в случае с командой ".open",во избежание двусмысленности можно
использовать полное имя пути с разделителями каталогов forward-slash.

3.Специальные команды sqlite3 (точечные


команды)
В большинстве случаев sqlite3 просто читает строки ввода и передает их на исполнение в библиотеку SQLite.Но
строки ввода,начинающиеся с точки (".")перехватываются и интерпретируются самой программой sqlite3.Эти
"точечные команды" обычно используются для изменения формата вывода запросов или для выполнения
определенных предупакованных операторов запроса.Изначально было всего несколько точечных команд,но с
годами накопилось много новых возможностей,так что сегодня их более 60.

Для списка доступных точечных команд можно ввести ".help" без аргументов.Или введите ".help TOPIC" для получения
подробной информации о TOPIC.Далее следует список доступных точечных команд:
sqlite> .help

.archive ... Manage SQL archives

.auth ON|OFF Show authorizer callbacks

.backup ?DB? FILE Backup DB (default "main") to FILE

.bail on|off Stop after hitting an error. Default OFF

.binary on|off Turn binary output on or off. Default OFF

.cd DIRECTORY Change the working directory to DIRECTORY

.changes on|off Show number of rows changed by SQL

.check GLOB Fail if output since .testcase does not match

.clone NEWDB Clone data into NEWDB from the existing database

.databases List names and files of attached databases

.dbconfig ?op? ?val? List or change sqlite3_db_config() options

.dbinfo ?DB? Show status information about the database

.dump ?TABLE? Render database content as SQL

.echo on|off Turn command echo on or off

.eqp on|off|full|... Enable or disable automatic EXPLAIN QUERY PLAN

.excel Display the output of next command in spreadsheet

.exit ?CODE? Exit this program with return-code CODE


.expert EXPERIMENTAL. Suggest indexes for queries

.explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto

.filectrl CMD ... Run various sqlite3_file_control() operations

.fullschema ?--indent? Show schema and the content of sqlite_stat tables

.headers on|off Turn display of headers on or off

.help ?-all? ?PATTERN? Show help text for PATTERN

.import FILE TABLE Import data from FILE into TABLE

.imposter INDEX TABLE Create imposter table TABLE on index INDEX

.indexes ?TABLE? Show names of indexes

.limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT

.lint OPTIONS Report potential schema issues.

.load FILE ?ENTRY? Load an extension library

.log FILE|off Turn logging on or off. FILE can be stderr/stdout

.mode MODE ?TABLE? Set output mode

.nullvalue STRING Use STRING in place of NULL values

.once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE

.open ?OPTIONS? ?FILE? Close existing database and reopen FILE


.output ?FILE? Send output to FILE or stdout if FILE is omitted

.parameter CMD ... Manage SQL parameter bindings

.print STRING... Print literal STRING

.progress N Invoke progress handler after every N opcodes

.prompt MAIN CONTINUE Replace the standard prompts

.quit Exit this program

.read FILE Read input from FILE

.recover Recover as much data as possible from corrupt db.

.restore ?DB? FILE Restore content of DB (default "main") from FILE

.save FILE Write in-memory database into FILE

.scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off

.schema ?PATTERN? Show the CREATE statements matching PATTERN

.selftest ?OPTIONS? Run tests defined in the SELFTEST table


.separator COL ?ROW? Change the column and row separators

.sha3sum ... Compute a SHA3 hash of database content


.shell CMD ARGS... Run CMD ARGS... in a system shell

.show Show the current values for various settings

.stats ?on|off? Show stats or turn stats on or off

.system CMD ARGS... Run CMD ARGS... in a system shell

.tables ?TABLE? List names of tables matching LIKE pattern TABLE

.testcase NAME Begin redirecting output to 'testcase-out.txt'

.testctrl CMD ... Run various sqlite3_test_control() operations

.timeout MS Try opening locked tables for MS milliseconds

.timer on|off Turn SQL timer on or off

.trace ?OPTIONS? Output each SQL statement as it is run

.vfsinfo ?AUX? Information about the top-level VFS

.vfslist List all available VFSes

.vfsname ?AUX? Print the name of the VFS stack

.width NUM1 NUM2 ... Set minimum column widths for columnar output

sqlite>

4.Правила для "точечных команд"


Обычные SQL-операторы имеют свободную форму и могут быть распределены по нескольким строкам,а также могут
иметь пробельные символы и комментарии в любом месте.Точка-команды более ограничены:
Точка-команда должна начинаться с "..." на левом поле без предварительного пробела.
Точка-команда должна полностью содержаться в одной строке ввода.
Точка-команда не может встречаться в середине обычного SQL-оператора.Другими словами,точечная команда
не может появиться при запросе на продолжение.
Точка-команды не распознают комментарии.

Точечные команды интерпретируются программой командной строки sqlite3.exe, а не самим SQLite. Таким образом,
ни одна из точечных команд не будет работать в качестве аргумента для интерфейсов SQLite, таких как sqlite3_prepare
() или sqlite3_exec () .

5.Изменение форматов вывода


Программа sqlite3 способна отображать результаты запроса в 14 различных форматах:

ascii
box
csv
column
html
insert
json
line
list
markdown
quote
table
tabs
tcl

Вы можете использовать точечную команду ".mode" для переключения между этими форматами вывода.По
умолчанию используется режим вывода "список".В режиме списка каждая строка результата запроса записывается в
одну строку,а каждый столбец в этой строке разделяется определенной строкой-разделителем.По умолчанию
разделителем является символ трубы ("|").Режим списка особенно полезен,когда вы собираетесь отправить результат
запроса в другую программу (например,AWK)для дополнительной обработки.

sqlite> .mode list

sqlite> select * from tbl1;

hello|10

goodbye|20

sqlite>

Для изменения разделителя используйте точечную команду ".разделитель".Например,чтобы изменить разделитель на


запятую и пробел,можно сделать это:

sqlite> .separator ", "

sqlite> select * from tbl1;

hello, 10

goodbye, 20

sqlite>

Следующая команда ".режим" вернет ".сепаратор" в состояние по умолчанию.Таким образом,если вы хотите


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

В режиме "кавычки" вывод форматируется как SQL-литералы.Строки заключены в одинарные кавычки,а внутренние
одинарные кавычки экранированы удвоением.Капли выводятся в шестнадцатеричной блочной литературной
нотации (Ex:x'abcd').Цифры отображаются в виде ASCII текста,а NULL значения отображаются в виде "NULL".Все
столбцы отделены друг от друга запятой (или любым другим альтернативным символом,выбранным с помощью
".разделителя").

sqlite> .mode quote

sqlite> select * from tbl1;

'hello',10

'goodbye',20

sqlite>

В режиме "строка" каждый столбец в строке БД отображается на строке сам по себе.Каждая строка состоит из
названия столбца,знака равенства и данных столбца.Последующие записи разделены пустой строкой.Приведем
пример вывода в "строчном" режиме:
sqlite> .mode line

sqlite> select * from tbl1;

one = hello

two = 10

one = goodbye

two = 20

sqlite>

В режиме столбцов каждая запись отображается отдельной строкой с данными,выровненными по


столбцам.Например:

sqlite> .mode column

sqlite> select * from tbl1;

one two

-------- ---

hello 10

goodbye 20

sqlite>

В режиме "колонки" (а также в режимах "box","table" и "markdown")ширина колонок регулируется автоматически.Но


это можно отменить,задав минимальную ширину для каждой колонки с помощью команды ".width".Аргументами
команды ".width" являются целые числа,которые представляют собой минимальное количество пробелов,отводимых
для каждой колонки.Отрицательные числа означают выравнивание вправо.Таким образом:

sqlite> .width 12 -6

sqlite> select * from tbl1;

one two

------------ ------

hello! 10

goodbye 20

sqlite>

Ширина 0 означает,что ширина столбца выбирается автоматически.Неуказанная ширина колонок становится равной
нулю.Следовательно,команда ".width" без аргументов обнуляет ширину всех колонок и,следовательно,приводит к
тому,что ширина всех колонок определяется автоматически.

Режим "колонка"-это формат табличного вывода.Другие форматы табличного вывода-"box","markdown" и "table":

sqlite> .width

sqlite> .mode markdown

sqlite> select * from tbl1;

| one | two |

|---------|-----|

| hello! | 10 |

| goodbye | 20 |

sqlite> .mode table

sqlite> select * from tbl1;

+---------+-----+

| one | two |

+---------+-----+

| hello! | 10 |

| goodbye | 20 |

+---------+-----+

sqlite> .mode box

sqlite> select * from tbl1;

┌─────────┬─────┐

│ one │ two │

├─────────┼─────┤

│ hello! │ 10 │

│ goodbye │ 20 │

└─────────┴─────┘

sqlite>

Другим полезным режимом вывода является "вставка".В режиме вставки вывод форматируется как SQL INSERT
операторы.Используйте режим вставки для генерации текста,который впоследствии может быть использован для
ввода данных в другую базу данных.

При указании режима вставки необходимо указать дополнительный аргумент-имя таблицы,в которую будет
вставлена таблица.Например:
sqlite> .mode insert new_table

sqlite> select * from tbl1;

INSERT INTO "new_table" VALUES('hello',10);

INSERT INTO "new_table" VALUES('goodbye',20);

sqlite>

Другие режимы вывода включают "html","json" и "tcl".Попробуйте их самостоятельно,чтобы увидеть,что они делают.

6.Запрос схемы базы данных


Программа sqlite3 предоставляет несколько удобных команд,которые полезны для просмотра схемы БД.В этих
командах нет ничего такого,что нельзя было бы сделать какими-либо другими способами.Эти команды
предоставляются исключительно в виде ярлыка.

Например,чтобы увидеть список таблиц в БД,можно ввести ".таблицы".

sqlite> .tables

tbl1

tbl2

sqlite>

Команда ".tables" аналогична установке режима списка,после чего выполняется следующий запрос:

SELECT name FROM sqlite_schema

WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'

ORDER BY 1

Но команда ".tables" делает больше. Он запрашивает таблицу sqlite_schema для всех подключенных баз данных, а не
только для первичной базы данных. И он размещает свой вывод в аккуратных столбцах.

Команда ".индексы" работает аналогичным образом,чтобы перечислить все индексы.Если команде ".индексы" задан
аргумент,который является именем таблицы,то она показывает только индексы на этой таблице.

Команда ".schema" показывает полную схему для БД или для одной таблицы,если указан необязательный аргумент
"tablename":

sqlite> .schema

create table tbl1(one varchar(10), two smallint)

CREATE TABLE tbl2 (

f1 varchar(30) primary key,

f2 text,

f3 real

sqlite> .schema tbl2

CREATE TABLE tbl2 (

f1 varchar(30) primary key,

f2 text,

f3 real

sqlite>

Команда ".schema" приблизительно аналогична режиму задания списка,после чего вводится следующий запрос:

SELECT sql FROM sqlite_schema

ORDER BY tbl_name, type DESC, name

Как и в случае с «.tables», команда «.schema» показывает схему для всех подключенных баз данных. Если вы хотите
увидеть схему только для одной базы данных (возможно, «основной»), вы можете добавить аргумент в «.schema»,
чтобы ограничить ее вывод:

sqlite> .schema main.*

Команда ".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.Перенаправление ввода/вывода

7.1.Запись результатов в файл


По умолчанию sqlite3 отправляет результаты запроса в стандартный вывод.Вы можете изменить это с помощью
команд ".output" и ".once".Просто поместите имя выходного файла в качестве аргумента в .output и все последующие
результаты запроса будут записаны в этот файл.Или используйте команду .once вместо .output,и результаты будут
перенаправлены только на одну следующую команду перед возвращением в консоль.Используйте .output без
аргументов,чтобы снова начать запись в стандартный вывод.Например:

sqlite> .mode list

sqlite> .separator |

sqlite> .output test_file_1.txt

sqlite> select * from tbl1;

sqlite> .exit

$ cat test_file_1.txt

hello|10

goodbye|20

Если первый символ имени файла ".output" или ".once" является символом трубы ("|"),то остальные символы
рассматриваются как команда,и выходные данные отправляются в эту команду.Это облегчает передачу результатов
запроса в какой-то другой процесс.Например,команда "open -f" на Mac открывает текстовый редактор для
отображения содержимого,которое он читает со стандартного входа.Таким образом,чтобы увидеть результаты
запроса в текстовом редакторе,можно набирать текст:

sqlite> .once '|open -f'

sqlite> SELECT * FROM bigTable;

Если команды ".output" или ".once" имеют аргумент "-e",то вывод собирается во временный файл и в этом текстовом
файле вызывается системный текстовый редактор.Таким образом,команда ".once -e" достигает того же результата,что
и ".once '|open -f'",но с пользой переносится на все системы.

Если команды ".output" или ".once" имеют аргумент "-x",который заставляет их накапливать вывод в виде Comma-
разделенных значений (CSV)во временном файле,то вызовите системную утилиту по умолчанию для просмотра CSV-
файлов (обычно это программа для работы с электронными таблицами)на результат.Это быстрый способ отправки
результата запроса в электронную таблицу для удобства просмотра:

sqlite> .once -x

sqlite> SELECT * FROM bigTable;

Команда ".excel"-это псевдоним для ".once -x".Она делает точно то же самое.

7.2.Чтение SQL из файла


В интерактивном режиме sqlite3 считывает вводимый текст (операторы SQL или точечные команды ) с клавиатуры.
Вы также можете перенаправить ввод из файла при запуске sqlite3, конечно, но тогда у вас нет возможности
взаимодействовать с программой. Иногда полезно запустить сценарий SQL, содержащийся в файле, вводя другие
команды из командной строки. Для этого предусмотрена точечная команда ".read".
Команда ".read" принимает единственный аргумент,который (обычно)является именем файла,из которого нужно
прочитать входной текст.

sqlite> .read myscript.sql

Команда ".read" временно прекращает чтение с клавиатуры и вместо этого берет данные из названного файла.По
достижении конца файла ввод возвращается к клавиатуре.Файл сценария может содержать команды с точками,как и
обычный интерактивный ввод.

Если аргумент ".read" начинается с символа "|",то вместо того,чтобы открыть аргумент как файл,он запускает аргумент
(без ведущего "|")как команду,а затем использует вывод этой команды в качестве входа.Таким образом,если у вас есть
сценарий,который генерирует SQL,вы можете выполнить этот SQL напрямую,используя команду,подобную
следующей:

sqlite> .read '|myscript.bat'

7.3.Функции ввода/вывода файлов


Оболочка командной строки добавляет две определяемые приложением функции SQL, которые облегчают чтение
содержимого из файла в столбец таблицы и запись содержимого столбца в файл соответственно.

SQL-функция readfile(X)читает все содержимое файла с именем X и возвращает это содержимое в виде BLOB.Это
может быть использовано для загрузки содержимого в таблицу.Например:

sqlite> CREATE TABLE images(name TEXT, type TEXT, img BLOB);

sqlite> INSERT INTO images(name,type,img)

...> VALUES('icon','jpeg',readfile('icon.jpg'));

SQL функция writeefile(X,Y)записывает блок Y в файл с именем X и возвращает количество записанных


байт.Используйте эту функцию для извлечения содержимого одного столбца таблицы в файл.Например:

sqlite> SELECT writefile('icon.jpg',img) FROM images WHERE name='icon';

Обратите внимание, что функции readfile (X) и writefile (X, Y) являются функциями расширения и не встроены в
базовую библиотеку SQLite. Эти процедуры доступны в виде загружаемых расширений в исходном файле ext / misc /
fileio.c в репозиториях исходного кода SQLite .

7.4.SQL-функция edit()
В CLI есть еще одна встроенная SQL-функция под названием edit().Функция edit()принимает один или два
аргумента.Первым аргументом является значение-обычно это большая многострочная строка,которую нужно
отредактировать.Второй аргумент-имя текстового редактора.Если второй аргумент опущен,то используется
переменная окружения VISUAL.Функция edit()записывает свой первый аргумент во временный файл,вызывает
редактор во временном файле,перечитывает файл обратно в память после завершения редактирования,затем
возвращает отредактированный текст.

Функция edit()может быть использована для внесения изменений в большие текстовые значения.Например:

sqlite> UPDATE docs SET body=edit(body) WHERE name='report-15';

В данном примере содержимое поля docs.body для записи,где docs.name-это "report-15",будет отправлено в
редактор.После возврата редактора результат будет записан обратно в поле docs.body.

Операция по умолчанию функции edit()заключается в вызове текстового редактора.Но,используя альтернативную


программу редактирования во втором аргументе,вы также можете заставить ее редактировать изображения или
другие нетекстовые ресурсы.Например,если вы хотите изменить JPEG-изображение,которое случайно хранится в
поле таблицы,вы можете запустить его:

sqlite> UPDATE pics SET img=edit(img,'gimp') WHERE id='pic-1542';

Программа редактирования также может быть использована в качестве программы просмотра,просто игнорируя
возвращаемое значение.Например,чтобы просто посмотреть на изображение выше,можно запустить программу:

sqlite> SELECT length(edit(img,'gimp')) WHERE id='pic-1542';

7.5.Импорт файлов CSV


С помощью команды ".import" импортируйте данные в формате CSV (значение,разделенное запятыми)в таблицу
SQLite.Команда ".import" принимает два аргумента:имя дискового файла,из которого должны быть прочитаны данные
CSV,и имя таблицы SQLite,в которую должны быть вставлены данные CSV.

Обратите внимание,что перед выполнением команды ".импорт" необходимо установить "режим" на "csv".Это
необходимо для того,чтобы оболочка командной строки не пыталась интерпретировать текст входного файла как
какой-то другой формат.

sqlite> .import C:/work/somedata.csv tab1

Есть два дела,которые нужно рассмотреть:(1)Таблицы "tab1" ранее не существовало и (2)таблица "tab1" уже
существует.

В первом случае,когда таблица ранее не существовала,таблица создается автоматически и содержимое первой


строки входного CSV-файла используется для определения имени всех столбцов таблицы.Другими словами,если
таблица ранее не существовала,первая строка CSV-файла интерпретируется как имена столбцов,а фактические
данные начинаются со второй строки CSV-файла.

Во втором случае,когда таблица уже существует,каждая строка CSV-файла,включая первую строку,принимается за


фактическое содержимое.Если CSV-файл содержит начальный ряд меток столбцов,вы можете заставить команду
.import пропустить этот начальный ряд с помощью опции "--skip 1".

7.6.Экспорт в CSV
Чтобы экспортировать таблицу SQLite (или часть таблицы)в формате CSV,просто установите "режим" в "csv",а затем
выполните запрос на извлечение нужных строк таблицы.

sqlite> .headers on

sqlite> .mode csv

sqlite> .once c:/work/dataout.csv

sqlite> SELECT * FROM tab1;

sqlite> .system c:/work/dataout.csv

В приведенном выше примере строка ".headers on" заставляет метки столбцов печататься в качестве первой строки
вывода.Это означает,что первая строка результирующего CSV-файла будет содержать метки столбцов.Если метки
столбцов не нужны,вместо этого установите ".headers off".(Настройка ".headers off" используется по умолчанию и
может быть опущена,если заголовки не были включены ранее).

Строка "...один разFILENAME"заставляет весь вывод запроса идти в указанный файл, а не выводить его на консоль. В
приведенном выше примере эта строка вызывает запись содержимого CSV в файл с именем" C: /work/dataout.csv ".

Последняя строка примера (".system c:/work/dataout.csv")имеет тот же эффект,что и двойной щелчок на файле
c:/work/dataout.csv в окнах.Обычно это вызовет программу электронной таблицы для отображения CSV-файла.

Эта команда работает только так,как написано в Windows.Эквивалентная строка на Mac:

sqlite> .system open dataout.csv

На Linux и других unix-системах Вам нужно будет ввести что-то вроде:

sqlite> .system xdg-open dataout.csv

7.6.1.Экспорт в Excel
Для упрощения экспорта в электронную таблицу CLI предоставляет команду ".excel",которая захватывает выходные
данные одного запроса и отправляет их в программу электронной таблицы по умолчанию на хост-
компьютере.Используйте ее таким образом:

sqlite> .excel

sqlite> SELECT * FROM tab;

Команда выше записывает вывод запроса в виде CSV во временный файл,вызывает обработчик по умолчанию для
CSV-файлов (обычно это предпочтительная программа для работы с таблицами,например,Excel или LibreOffice),затем
удаляет временный файл.По сути,это краткосрочный метод выполнения последовательности команд ".csv",".once" и
".system",описанный выше.
Команда ".excel" на самом деле является псевдонимом для ".once -x".Опция -x в .once приводит к записи результатов в
виде CSV во временный файл,который называется суффиксом ".csv",а затем вызывает системный обработчик по
умолчанию для CSV-файлов.

Также существует команда ".once -e",которая работает аналогичным образом,за исключением того,что она называет
временный файл суффиксом ".txt" таким образом,что вместо стандартной электронной таблицы будет вызван
текстовый редактор по умолчанию для системы.

8.Доступ к ZIP-архивам как к файлам базы


данных
Помимо чтения и записи файлов базы данных SQLite, программа sqlite3 также читает и записывает ZIP-архивы.
Просто укажите имя файла ZIP-архива вместо имени файла базы данных SQLite в начальной командной строке или в
команде «.open», и sqlite3 автоматически определит, что файл является ZIP-архивом, а не базой данных SQLite, и
откроет его как такой. Это работает независимо от суффикса файла. Таким образом, вы можете открывать файлы JAR,
DOCX и ODP, а также файлы любого другого формата, которые на самом деле являются ZIP-архивом, и SQLite
прочитает их за вас.

Архив ZIP представляется как база данных,содержащая одну таблицу со следующей схемой:

CREATE TABLE zip(

name, // Имя файла

mode, // Права доступа к файлам в стиле Unix

mtime, // Отметка времени в секундах с 1970 г.

sz, // Размер файла после распаковки

rawdata, // Необработанные сжатые данные файла

data, // Несжатое содержимое файла

method // Код метода сжатия ZIP

);

Так,например,если вы хотите увидеть эффективность сжатия (выраженную как размер сжатого содержимого
относительно исходного размера несжатого файла)для всех файлов в архиве ZIP,отсортированных от наиболее
сжатого к наименее сжатому,вы можете выполнить следующий запрос:

sqlite> SELECT name, (100.0*length(rawdata))/sz FROM zip ORDER BY 2;

Или, используя функции файлового ввода-вывода , вы можете извлечь элементы ZIP-архива:

sqlite> SELECT writefile(name,content) FROM zip

...> WHERE name LIKE 'docProps/%';

8.1.Как реализован доступ к архиву ZIP


Оболочка командной строки использует виртуальную таблицу Zipfile для доступа к архивам ZIP. В этом можно
убедиться, выполнив команду ".schema" при открытом ZIP-архиве:

sqlite> .schema

CREATE VIRTUAL TABLE zip USING zipfile('document.docx')

/ * zip (имя, режим, mtime, sz, rawdata, data, method) * /;

Если при открытии файла клиент командной строки обнаруживает, что файл представляет собой ZIP-архив, а не базу
данных SQLite, он фактически открывает базу данных в памяти, а затем в этой базе данных в памяти создает
экземпляр виртуальной таблицы Zipfile, которая прилагается к ZIP-архиву.

Специальная обработка для открытия ZIP-архивов - это уловка оболочки командной строки, а не основной
библиотеки SQLite. Поэтому, если вы хотите открыть ZIP-архив в качестве базы данных в своем приложении, вам
нужно будет активировать модуль виртуальной таблицы Zipfile, а затем выполнить соответствующий оператор
CREATE VIRTUAL TABLE .

9.Преобразование всей базы данных в


текстовый файл ASCII
Используйте команду «.dump» для преобразования всего содержимого базы данных в один текстовый файл ASCII.
Этот файл можно преобразовать обратно в базу данных, вернув его в sqlite3 .

Хороший способ сделать архивную копию базы данных-это сделать это:


$ sqlite3 ex1 .dump | gzip -c >ex1.dump.gz

В результате будет создан файл с именем ex1.dump.gz , содержащий все необходимое для восстановления базы
данных позже или на другом компьютере. Чтобы восстановить базу данных, просто введите:

$ zcat ex1.dump.gz | sqlite3 ex2

Текстовый формат является чистым SQL,поэтому вы также можете использовать команду .dump для экспорта базы
данных SQLite в другие популярные движки баз данных SQL.Вот так:

$ createdb ex2

$ sqlite3 ex1 .dump | psql ex2

10.Восстановление данных из поврежденной


базы данных
Подобно команде ".dump",".recover" пытается преобразовать все содержимое файла базы данных в текст.Разница в
том,что вместо чтения данных с помощью обычного интерфейса базы данных SQL,".recover" пытается собрать базу
данных на основе данных,извлеченных непосредственно из как можно большего количества страниц базы
данных.Если база данных повреждена,".recover",как правило,может восстановить данные из всех поврежденных
частей базы данных,тогда как ".dump" останавливается при первом же признаке повреждения.

Если команда ".восстановить" восстанавливает одну или несколько строк,которые она не может атрибутировать ни к
одной из таблиц БД,то выходной скрипт создает таблицу "lost_and_found" для хранения осиротевших строк.Схема
таблицы lost_and_found выглядит следующим образом:

CREATE TABLE lost_and_found(

rootpgno INTEGER, - корневая страница дерева pgno является частью

pgno INTEGER, - найдена строка с номером страницы

nfield INTEGER, - количество полей в строке

id INTEGER, - значение поля rowid или NULL


c0, c1, c2, c3... - столбцы для полей строки

);

Таблица "lost_and_found" содержит по одной строке для каждой осиротевшей строки,восстановленной из БД.Кроме
того,для каждой восстановленной записи индекса есть одна строка,которая не может быть отнесена ни к одному SQL-
индексу.Это связано с тем,что в базе данных SQLite используется один и тот же формат для хранения записей индекса
SQL и записей таблицы БЕЗ РОУИДА.

Column Contents

rootpgno Несмотря на то,что атрибуция строки к определенной таблице БД может быть невозможна,она может
быть частью древовидной структуры в файле БД.В этом случае в данной колонке хранится номер
корневой страницы этой древовидной структуры.Или,если страница,на которой была найдена
строка,не является частью древовидной структуры,в данной колонке хранится копия значения в
колонке "pgno"-номер страницы,на которой была найдена строка.Во многих,хотя и не во всех
случаях,случаях все строки в таблице lost_and_found с одинаковым значением в этой колонке
принадлежат одной и той же таблице.

pgno Номер страницы,на которой была найдена эта строка.

nfield Количество полей в этой строке.

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> .load /path/to/my_extension

Обратите внимание,что SQLite автоматически добавляет соответствующий суффикс расширения (".dll" в окнах,".dylib"
в Mac,".so" в большинстве других unix)к имени файла расширения.Обычно рекомендуется указывать полное имя
расширения.

SQLite вычисляет точку входа для расширения на основе имени файла расширения.Чтобы переопределить этот
выбор,просто добавьте имя расширения в качестве второго аргумента в команду ".load".

Исходный код нескольких полезных расширений можно найти в подкаталоге ext / misc дерева исходных текстов
SQLite. Вы можете использовать эти расширения как есть или в качестве основы для создания ваших собственных
расширений для удовлетворения ваших конкретных потребностей.

12.Криптографические хэши содержимого


базы данных
Точка-команда ".sha3sum" вычисляет SHA3- хэш содержимого базы данных. Чтобы было ясно, хеш вычисляется по
содержимому базы данных, а не по ее представлению на диске. Это означает, например, что VACUUM или подобное
преобразование с сохранением данных не изменяет хэш.

Команда ".sha3sum" поддерживает опции "--sha3-224","--sha3-256","--sha3-384" и "--sha3-512" для определения,какой


вариант SHA3 использовать для хэша.По умолчанию используется SHA3-256.

Схема базы данных (в таблице sqlite_schema ) обычно не включается в хэш, но может быть добавлена ​с помощью
параметра «--schema».

Команда ".sha3sum" принимает единственный необязательный аргумент, который является шаблоном LIKE . Если этот
параметр присутствует, будут хешироваться только таблицы, имена которых соответствуют шаблону LIKE .

Команда «.sha3sum» реализована с помощью функции расширения «sha3_query ()», которая включена в оболочку
командной строки.

13.Самотестирование содержания базы


данных
Команда ".selftest" пытается проверить,что БД не повреждена и не повреждена.Команда ".selftest" ищет таблицу в
схеме под названием "selftest" и определяется следующим образом:

CREATE TABLE selftest(

tno INTEGER PRIMARY KEY, - Номер теста

op TEXT, - «беги» или «записка»

cmd TEXT, - SQL-команда для запуска или текст «памятки»

ans TEXT - Ожидаемый результат команды SQL

);

Команда .selftest читает строки таблицы selftest в порядке selftest.tno.Для каждой строки 'memo' она записывает текст
в 'cmd'.Для каждой строки 'run' она запускает текст 'cmd' в виде SQL и сравнивает результат со значением в 'ans',а
также выводит сообщение об ошибке,если результаты отличаются.

Если таблицы самопроверки нет, команда ".selftest" запускает PRAGMA Integrity_check .

Команда ".selftest --init" создает таблицу самотестирования, если она еще не существует, а затем добавляет записи,
которые проверяют хэш SHA3 содержимого всех таблиц. Последующие запуски ".selftest" будут проверять, что база
данных не была изменена каким-либо образом. Для генерирует тесты , чтобы убедиться , что подмножество таблиц
неизменны, просто запустите «.selftest --init» , то УДАЛИТЬ самотестирования строки, относящиеся к таблицам,
которые не являются постоянными.

14.Поддержка архивации SQLite


Точка-команда ".archive" и параметр командной строки "-A" обеспечивают встроенную поддержку формата архива
SQLite . Интерфейс аналогичен интерфейсу команды tar в системах unix. Каждый вызов команды ".ar" должен
указывать единственный параметр команды. Для ".archive" доступны следующие команды:

Option Длинный вариант Purpose

-c --create Создайте новый архив,содержащий указанные файлы.

-x --extract Извлечь указанные файлы из архива.

-i --insert Добавить файлы в существующий архив.

-t --list Перечислите файлы в архиве.

-u --update Добавьте файлы в существующий архив, если они изменились.

Так же как и опция команды,каждый вызов ".ar" может указывать одну или несколько опций
модификатора.Некоторые опции модификаторов требуют аргумента,некоторые нет.Доступны следующие опции
модификаторов:

Option Длинный Purpose


вариант

-v --verbose Перечислите каждый файл в процессе обработки.

-f --file Если указано,используйте в качестве архива файл FILE.В противном случае


ФАЙЛ ФАЙЛ предположим,что текущей "главной" БД является архив,с которым необходимо работать.

-файл --append Как и --file, используйте файл FILE в качестве архива, но откройте файл с помощью apndvfs
ФАЙЛ VFS, чтобы архив был добавлен в конец FILE, если FILE уже существует.

-C DIR - каталог Если указано,интерпретируйте все относительные пути как относительные к DIR,а не к
DIR текущей рабочей директории.

-n --dryrun Покажите SQL,который будет запущен для выполнения операции архивации,но на самом
деле ничего не меняйте.

-- -- Все последующие слова командной строки являются аргументами команд,а не опциями.

Для использования в командной строке добавьте опции короткой командной строки сразу после "-A",без
промежутка времени.Все последующие аргументы считаются частью команды .archive.Например,следующие команды
эквивалентны:

sqlite3 new_archive.db -Acv file1 file2 file3

sqlite3 new_archive.db ".ar -cv file1 file2 file3"

Длинные и короткие варианты стиля могут быть смешанными.Например,следующие варианты эквивалентны:

-- Two ways to create a new archive named "new_archive.db" containing

-- files "file1", "file2" and "file3".

.ar -c --file new_archive.db file1 file2 file3

.ar -f new_archive.db --create file1 file2 file3

В качестве альтернативы первым аргументом после ".ar" может быть конкатенация короткой формы всех требуемых
опций (без символов "-").В этом случае аргументы требуемых опций читаются из следующей командной строки,а
любые оставшиеся слова считаются командными аргументами.Например:

-- Create a new archive "new_archive.db" containing files "file1" and

-- "file2" from directory "dir1".

.ar cCf dir1 new_archive.db file1 file2 file3

14.1.Команда создания архива SQLite


Создать новый архив,перезаписав любой существующий архив (либо в текущем "основном" db,либо в
файле,заданном опцией --file).Каждый аргумент,следующий за опцией,является файлом для добавления в
архив.Каталоги импортируются рекурсивно.См.примеры выше.

14.2.Команда извлечения архива SQLite


Извлекать файлы из архива (либо в текущую рабочую директорию,либо в директорию,указанную опцией --
directory).При отсутствии аргументов после опции все файлы извлекаются из архива.Или,если аргументы есть,это
имена файлов для извлечения из архива.Любые указанные каталоги распаковываются рекурсивно.Ошибка,если
какие-либо из указанных файлов не входят в состав архива.

- Извлечь все файлы из архива в текущей "основной" БД в

- текущий рабочий каталог. Список файлов по мере их извлечения.

.ar --extract --verbose

- Распаковать файл «file1» из архива «ar.db» в каталог «dir1».

.ar fCx ar.db dir1 file1

14.3.Команда SQLite Archive List


Перечислите содержимое архива.Если аргументы не указаны,то перечисляются все файлы.В противном случае,только
те,которые указаны в качестве аргументов.На данный момент опция --verbose не изменяет поведение этой
команды.Это может измениться в будущем.

- Список содержимого архива в текущей "основной" базе данных ..

.ar --list

14.4.Команды вставки и обновления архива SQLite


Команды --update и --insert работают как команда --creatate,за исключением того,что они не удаляют текущий архив
перед началом работы.Новые версии файлов беззвучно заменяют существующие файлы на те же имена,но в
противном случае исходное содержимое архива (если таковое имеется)остается нетронутым.

Для команды --insert все перечисленные файлы вставляются в архив.Для команды --update файлы вставляются только
в том случае,если они ранее не существовали в архиве,или если их "mtime" или "mode" отличается от того,что
находится в архиве в данный момент.

Узел совместимости:До версии SQLite 3.28.0 (2019-04-16)поддерживалась только опция --update,но эта опция
работала как --insert в том,что она всегда переустанавливала каждый файл,независимо от того,изменился он или нет.

14.5.Операции над архивами ZIP


Если ФАЙЛ является ZIP-архивом, а не архивом SQLite, команда «.archive» и параметр командной строки «-A» по-
прежнему работают. Это достигается с помощью расширения zipfile . Следовательно, следующие команды примерно
эквивалентны, различаются только форматированием вывода:

традиционная команда Эквивалентный sqlite3.exe Команда

распаковать архив.zip sqlite3 -Axf архив.zip

распаковать -l архив.zip sqlite3 -Atvf архив.zip

zip -r archive2.zip you sqlite3 -Acf архив2.zip пират

14.6.SQL,используемый для реализации операций


архивирования SQLite
Различные команды SQLite Archive Archive реализуются с помощью операторов SQL.Разработчики приложения могут
легко добавить поддержку чтения и записи SQLite Archive Archive в свои собственные проекты,запустив
соответствующий SQL.
Чтобы посмотреть,какие SQL-операторы используются для реализации операции SQLite Archive,добавьте опцию --
dryrun или -n.Это приводит к тому,что SQL отображается,но тормозит выполнение SQL.

Операторы 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 _... () .

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


вопросительным знаком ("?").Именованные параметры-это "?",за которым сразу же следует цифра (например:"?15"
или "?123")или один из символов "$",":" или "@",за которым следует буквенно-цифровое имя
(например:"$var1",":xyz","@bingo").

Эта оболочка командной строки оставляет безымянные параметры не связанными,что означает,что они будут иметь
значение SQL NULL,но именованным параметрам могут быть присвоены значения.Если существует таблица TEMP с
именем "sqlite_parameters",то есть такая схема:

CREATE TEMP TABLE sqlite_parameters(

key TEXT PRIMARY KEY,

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» в исходном коде оболочки командной строки, чтобы увидеть, как оболочка командной
строки выполняет привязку параметров, и использовать это как подсказку о том, как реализовать это самостоятельно.

16.Рекомендации по индексам (SQLite Expert)


Примечание. Это экспериментальная команда. Он может быть удален или интерфейс может быть изменен
несовместимым образом в какой-то момент в будущем.
Для большинства нетривиальных баз данных SQL ключом к производительности является создание правильных
индексов SQL.В данном контексте "правильные SQL-индексы" означают те,которые вызывают запросы,которые
необходимо оптимизировать для быстрой работы приложения.Команда ".эксперт" может помочь в этом,предлагая
индексы,которые могли бы помочь с конкретными запросами,если бы они присутствовали в БД.

Сначала выдается команда ".эксперт",а затем SQL-запрос в отдельной строке.Например,рассмотрим следующую


сессию:

sqlite> CREATE TABLE x1(a, b, c); - Создать таблицу в базе данных

sqlite> .expert

sqlite> SELECT * FROM x1 WHERE a=? AND b>?; - Проанализируйте этот ВЫБОР

CREATE INDEX x1_idx_000123a7 ON x1(a, b);

0|0|0|SEARCH TABLE x1 USING INDEX x1_idx_000123a7 (a=? AND b>?)

sqlite> CREATE INDEX x1ab ON x1(a, b); - Создать рекомендуемый индекс

sqlite> .expert
English
sqlite> SELECT * FROM x1 WHERE a=? AND b>?; - Повторно проанализируйте тот же ВЫБОР

19. Ending shell commands


Santa Beauty Momo Horror MineCraft
(no new indexes)
Jigsaw Puzzle Story Classic Online

Learn more Learn more Learn more


0|0|0|SEARCH TABLE x1 USING INDEX x1ab Feedback Close
(a=? AND b>?)

В приведенном выше примере пользователь создает схему базы данных (одна таблица - «x1»), а затем использует
команду «.expert» для анализа запроса, в данном случае «SELECT * FROM x1 WHERE a =? AND b>? ". Инструмент
оболочки рекомендует пользователю создать новый индекс (индекс «x1_idx_000123a7») и вывести план, который
будет использовать запрос, в формате EXPLAIN QUERY PLAN . Затем пользователь создает индекс с эквивалентной
схемой и снова запускает анализ того же запроса. На этот раз инструмент оболочки не рекомендует никаких новых
индексов и выводит план, который SQLite будет использовать для запроса с учетом существующих индексов.

Команда ".эксперт" принимает следующие варианты:

Option Purpose

--verbose Если он присутствует,выводите более подробный отчет по каждому проанализированному запросу.

--sample По умолчанию команда «.expert» рекомендует индексы только на основе запроса и схемы базы
ПРОЦЕНТ данных. Это похоже на то, как планировщик запросов SQLite выбирает индексы для запросов, если
пользователь не выполнил команду ANALYZE в базе данных для генерации статистики
распределения данных.
Если этот параметр передан ненулевым аргументом,то команда ".эксперт" генерирует аналогичную
статистику распределения данных по всем рассматриваемым индексам на основе PERCENT
процентов строк,хранящихся в настоящее время в каждой таблице БД.Для БД с необычными
распределениями данных это может привести к улучшению рекомендаций по индексам,особенно
если приложение намерено запустить ANALYZE.
Для небольших баз данных и современных процессоров,как правило,нет причин не сдавать "-
образец 100".Однако сбор статистики распределения данных может быть дорогостоящим для
больших таблиц баз данных.Если операция слишком медленная,попробуйте передать меньшее
значение для опции "-образца".

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

17.Другие точечные команды


В оболочке командной строки доступно множество других точечных команд.Полный список для любой конкретной
версии и сборки SQLite см.в команде ".help".

18.Использование sqlite3 в сценарии


оболочки
Один из способов использования sqlite3 в скрипте оболочки-использовать "echo" или "cat" для генерации
последовательности команд в файле,а затем вызывать sqlite3 при перенаправлении входных данных из
сгенерированного командного файла.Это прекрасно работает и подходит во многих случаях.Но в качестве
дополнительного удобства sqlite3 позволяет ввести в командную строку одну SQL-команду в качестве второго
аргумента после имени БД.При запуске программы sqlite3 с двумя аргументами второй аргумент передается на
обработку в библиотеку SQLite,результаты запроса выводятся на стандартный вывод в режиме списка,и программа
завершает работу.Данный механизм предназначен для того,чтобы сделать sqlite3 простым в использовании
совместно с программами типа "awk".Например:
$ sqlite3 ex1 'select * from tbl1' |

> awk '{printf "<tr><td>%s<td>%s\n",$1,$2 }'

<tr><td>hello<td>10

<tr><td>goodbye<td>20

19.Завершение команд командной оболочки


Команды SQLite обычно заканчиваются точкой с запятой. В оболочке вы также можете использовать слово «GO» (без
учета регистра) или косую черту «/» в отдельной строке для завершения команды. Они используются SQL Server и
Oracle соответственно. Они не будут работать в sqlite3_exec () , потому что оболочка переводит их в точку с запятой
перед передачей в эту функцию.

20.Компиляция программы sqlite3 из


исходных текстов
Для компиляции оболочки командной строки на unix-системах и в Windows с помощью MinGW работает обычная
команда configure-make:

sh configure; make

Configure-make работает независимо от того, собираете ли вы из канонических источников из дерева исходных


текстов или из объединенного пакета. Есть несколько зависимостей. При сборке из канонических источников
требуется рабочий tclsh . При использовании пакета объединения вся работа по предварительной обработке,
обычно выполняемая tclsh, уже будет выполнена, и требуются только обычные инструменты сборки.

Для работы команды .archive необходима рабочая библиотека сжатия zlib .

На Windows с MSVC используйте nmake с Makefile.msc:

nmake /f Makefile.msc

Для правильной работы команды .archive сделайте копию исходного кода zlib в подкаталог compat / zlib дерева
исходных текстов и скомпилируйте следующим образом:

nmake /f Makefile.msc USE_ZLIB=1

20.1.Самодельные конструкции
Исходный код интерфейса командной строки sqlite3 находится в одном файле с именем «shell.c». Исходный файл
shell.c создается из других источников, но большую часть кода для shell.c можно найти в src / shell.c.in . (Восстановите
shell.c, набрав «make shell.c» из канонического исходного дерева.) Скомпилируйте файл shell.c (вместе с исходным
кодом библиотеки sqlite3 ), чтобы сгенерировать исполняемый файл. Например:

gcc -o sqlite3 shell.c sqlite3.c -ldl -lpthread -lz -lm

Для обеспечения полнофункциональной оболочки командной строки рекомендуются следующие дополнительные


опции времени компиляции:

-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

SQLite находится в публичном домене.

https://sqlite.org/cli.html
Search... 

Top
Help us Improve Translation Privacy Policy

Вам также может понравиться