====== Sqlite: программа для доступа к базам SQLite из командной строки ====== Библиотека SQLite включает простую утилиту по имени sqlite3 для командной строки, которая позволяет пользователю вручную вводить и выполнять команды SQL на базе SQLite. Этот документ содержит краткое введение в использование sqlite3. ===== Приступим ===== Запустите программу sqlite3, указав после **sqlite3** имя файла, содержащего базу SQLite. Если файл не существует, то будет создан автоматически. Программа **sqlite** пригласит вас ввести команды SQL. Введите предложения SQL (разделенные точкой с запятой), нажмите "Enter" и команды будут выполнены. Например, чтобы создать новую базу SQLite по имени "ex1" с единственной таблицей "tbl1", вы должны сделать следующее: $ sqlite3 ex1 SQLite version 2.0.0 Enter ".help" for instructions 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> Вы можете завершить программу sqlite, введя принятый в вашей системе символ конца файла (обычно - Control-D) или символ прерывания (обычно - Control-C). Убедительно просим вас вводить точку с запятой после каждой команды SQL! Sqlite рассматривает точку с запятой как подтверждение, что ваша команда SQL полностью введена. Если вы пропустите точку с запятой, sqlite выдаст вам приглашение продолжить, и будет ждать, что вы введете текст, дополняющий текущую команду SQL. Эта возможность позволяет вам вводить многострочные команды SQL. Например: sqlite> CREATE TABLE tbl2 ( ...> f1 varchar(30) primary key, ...> f2 text, ...> f3 real ...> ); sqlite> Отступление: запрашиваем таблицу "SQLITE_MASTER" В базе SQLite схема хранится в специальной таблице, называемой "sqlite_master". Вы можете выполнять инструкции "SELECT" на этой таблице, чтобы узнать, какие другие таблицы есть в этой базе SQLite. Например: $ sqlite ex1 SQlite vresion 2.0.0 Enter ".help" for instructions sqlite> select * from sqlite_master; type = table name = tbl1 tbl_name = tbl1 rootpage = 3 sql = create table tbl1(one varchar(10), two smallint) sqlite> Но вы не можете выполнять "DROP TABLE", "UPDATE", "INSERT" и "DELETE" на таблице "sqlite_master". Таблица "sqlite_master" изменяется автоматически, когда вы создаете или удаляете таблицы и индексы в базе. Вы не должны вручную изменять таблицу "sqlite_master". Схема временных ("TEMPORARY") таблиц не хранится в таблице "sqlite_master", так как временные таблицы видны только тем приложениям, которые их создали. Схема временных таблиц хранится в другой специальной таблице, которая называется "sqlite_temp_master". Таблица "sqlite_temp_master" сама является временной. Специальные команды sqlite В большинстве случаев sqlite читает строку ввода и обрабатывает ее с помощью библиотеки SQLite. Но если строка ввода начинается с точки ("."), то эта строка выделяется и интерпретируется самой программой sqlite. Эти "команды с точкой" обычно используются, чтобы поменять выходной формат запросов или чтобы выполнить какие-то заранее приготовленные запросы. Для получения списка доступных команд с точкой вы в любое время можете ввести ".help". Например [На самом деле описания команд будут выданы на английском языке. - Прим. Д.С.]: sqlite> .help .databases Список имен и файлов подключенных баз данных .dump ?TABLE? ... Дамп базы данных в текстовом формате .echo ON|OFF Установить эхо команд в "on" или "off" .exit Завершить эту программу .explain ON|OFF Установить режим вывода удобным для "EXPLAIN"; on или off. .header(s) ON|OFF Установить вывод заголовков в on или off .help Показать это сообщение .indices TABLE Показать имена всех индексов для "TABLE" .mode MODE Установить режим вывода в значение "line(s)", "column(s)", "insert", "list", или "html" .mode insert TABLE Генерировать SQL-инструкции "INSERT" для "TABLE" .nullvalue STRING Выводить "STRING" вместо пустой строки для значений "NULL" .output FILENAME Перенаправить вывод в "FILENAME" .output stdout Перенаправить вывод на экран .prompt MAIN CONTINUE Заменить стандартные приглашения .quit Завершить эту программу .read FILENAME Выполнить SQL из "FILENAME" .schema ?TABLE? Показать инструкции "CREATE" .separator STRING Изменить разделитель строк для режима ("mode") "list" .show Показать текущие значения установленных переменных .tables ?PATTERN? Список имен таблиц согласно шаблону .timeout MS Попытаться открыть заблокированные таблицы через MS миллисекунд .width NUM NUM ... Установить ширину столбцов для режима ("mode") "column" sqlite> ===== Изменяем формат вывода ===== Программа sqlite умеет показывать результаты запросов в пяти различных форматах: "line", "column", "list", "html" и "insert". Вы можете использовать команду с точкой ".mode", чтобы переключаться между этими форматами вывода. По умолчанию форматом вывода является "list" - "список". В этом формате каждая запись в результате запроса записывается в одну строчку вывода, и каждый столбец этой записи отделен от других специальным символом. По умолчанию разделителем является вертикальная черта ("|"). Списочный режим особенно полезен, когда вы собираетесь перенаправить вывод другой программе (такой как AWK) для дальнейшей обработки. sqlite> .mode list sqlite> select * from tbl1; hello|10 goodbye|20 sqlite> Вы можете использовать команду с точкой ".separator", чтобы изменить разделитель для списочного формата. Например, чтобы сменить разделитель на запятую с пробелом, вы можете сделать следующее: sqlite> .separator ", " sqlite> select * from tbl1; hello, 10 goodbye, 20 sqlite> В режиме вывода "line" - "строка" каждый столбец в записи базы данных отображается отдельной строкой. Каждая строка состоит из имени столбца, знака равенства и значения столбца. Последовательные записи отделяются друг от друга пустой строкой. Вот пример строчного режима вывода: sqlite> .mode line sqlite> select * from tbl1; one = hello two = 10 one = goodbye two = 20 sqlite> В режиме вывода "column", каждая запись выводится в отдельной строке с данными, выровненными по столбцам. Например: sqlite> .mode column sqlite> select * from tbl1; one two ---------- ---------- hello 10 goodbye 20 sqlite> По умолчанию, каждый столбец имеет ширину не менее чем в 10 символов. Данные, которые не умещаются в столбец, обрезаются. Вы можете изменить ширину столбцов с помощью команды ".width". Например так: sqlite> .width 12 6 sqlite> select * from tbl1; one two ------------ ------ hello 10 goodbye 20 sqlite> В этом примере команда ".width" устанавливает ширину первого столбца в 12 символов и ширину второго столбца - в 6 символов. Для всех остальных столбцов ширина осталась неизменной. Для команды ".width" можно указывать столько аргументов, сколько столбцов содержится в результате вашего запроса. Если вы указали ширину столбца как 0, то эта ширина будет автоматически установлена в максимум трех чисел: 10, ширина заголовка, ширина первой строки данных. Таким образом, ширина столбца станет самонастраивающейся. По умолчанию, ширина каждого столбца имеет самонастраивающее значение 0. Обозначения столбцов в первых двух строках вывода могут быть включены ("on") или выключены ("off") с помощью команды с точкой ".header". В примере выше обозначения столбцов включены ("on"). Перевести их в "off" вы можете следующим образом: sqlite> .header off sqlite> select * from tbl1; hello 10 goodbye 20 sqlite> Другим полезным режимом вывода является "insert". В этом режиме вывод форматируется в SQL выражения "INSERT". Вы можете использовать режим "insert" для генерации текста, который позже сможете использовать для ввода в различные базы данных. Когда вы устанавливаете режим "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". В этом режиме SQLite записывает результат запроса в виде таблицы XHTML. Начальный