Spec-Zone.ru › SQLite

ATTACH DATABASE

1. Обзор

attach-stmt:

ATTACH DATABASE expr AS schema-name

expr:

literal-value bind-parameter schema-name . table-name . column-name unary-operator expr expr binary-operator expr function-name ( function-arguments ) filter-clause over-clause ( expr ) , CAST ( expr AS type-name ) expr COLLATE collation-name expr NOT LIKE GLOB REGEXP MATCH expr expr ESCAPE expr expr ISNULL NOTNULL NOT NULL expr IS NOT DISTINCT FROM expr
expr NOT BETWEEN expr AND expr expr NOT IN ( select-stmt ) expr , schema-name . table-function ( expr ) table-name , NOT EXISTS ( select-stmt ) CASE expr WHEN expr THEN expr ELSE expr END raise-function

filter-clause:

FILTER ( WHERE expr )

function-arguments:

DISTINCT expr , * ORDER BY ordering-term ,

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

literal-value:

CURRENT_TIMESTAMP numeric-literal string-literal blob-literal NULL TRUE FALSE CURRENT_TIME CURRENT_DATE

over-clause:

OVER window-name ( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

frame-spec:

GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING RANGE ROWS UNBOUNDED PRECEDING expr PRECEDING CURRENT ROW expr PRECEDING CURRENT ROW expr FOLLOWING expr PRECEDING CURRENT ROW expr FOLLOWING EXCLUDE CURRENT ROW EXCLUDE GROUP EXCLUDE TIES EXCLUDE NO OTHERS

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

raise-function:

RAISE ( ROLLBACK , expr ) IGNORE ABORT FAIL

select-stmt:

WITH RECURSIVE common-table-expression , SELECT DISTINCT result-column , ALL FROM table-or-subquery join-clause , WHERE expr GROUP BY expr HAVING expr , WINDOW window-name AS window-defn , VALUES ( expr ) , , compound-operator select-core ORDER BY LIMIT expr ordering-term , OFFSET expr , expr

common-table-expression:

table-name ( column-name ) AS NOT MATERIALIZED ( select-stmt ) ,

compound-operator:

UNION UNION INTERSECT EXCEPT ALL

join-clause:

table-or-subquery join-operator table-or-subquery join-constraint

join-constraint:

USING ( column-name ) , ON expr

join-operator:

NATURAL LEFT OUTER JOIN , RIGHT FULL INNER CROSS

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

result-column:

expr AS column-alias * table-name . *

table-or-subquery:

schema-name . table-name AS table-alias INDEXED BY index-name NOT INDEXED table-function-name ( expr ) , AS table-alias ( select-stmt ) ( table-or-subquery ) , join-clause

window-defn:

( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

frame-spec:

GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING RANGE ROWS UNBOUNDED PRECEDING expr PRECEDING CURRENT ROW expr PRECEDING CURRENT ROW expr FOLLOWING expr PRECEDING CURRENT ROW expr FOLLOWING EXCLUDE CURRENT ROW EXCLUDE GROUP EXCLUDE TIES EXCLUDE NO OTHERS

type-name:

name ( signed-number , signed-number ) ( signed-number )

signed-number:

+ numeric-literal -

Оператор ATTACH DATABASE добавляет еще один файл базы данных к текущему подключению к базе данных. Ранее присоединенные файлы баз данных можно удалить с помощью команды DETACH DATABASE.

2. Подробности

Имя файла присоединяемой базы данных — это значение выражения, расположенного перед ключевым словом AS. Имя файла базы данных обрабатывается так же, как аргумент filename функций sqlite3_open() и sqlite3_open_v2(); специальное имя «:memory:» создает базу данных в оперативной памяти, а пустая строка — новую временную базу данных. Аргумент filename может быть именем файла URI, если на подключении к базе данных включена обработка имен файлов URI. По умолчанию имена файлов URI отключены, однако это может измениться в будущей версии SQLite, поэтому разработчикам приложений рекомендуется учитывать такую возможность.

Имя, расположенное после ключевого слова AS, — это имя базы данных, используемое SQLite внутри. Имена схем «main» и «temp» относятся к основной базе данных и базе данных, используемой для временных таблиц. Основную базу данных и временную базу данных нельзя присоединить или отсоединить.

Для присоединенных баз данных используется та же VFS, что и для основной базы данных, если только другая VFS не указана с помощью флага URI vfs=NAME.

К таблицам в присоединенной базе данных можно обращаться с помощью синтаксиса schema-name.table-name. Если имя таблицы уникально среди всех присоединенных баз данных, а также основной и временной баз данных, префикс schema-name не требуется. Если две или более таблицы в разных базах данных имеют одинаковое имя и при обращении к таблице не используется префикс schema-name, будет выбрана таблица из базы данных, присоединенной раньше остальных.

Транзакции, затрагивающие несколько присоединенных баз данных, являются атомарными при условии, что основная база данных не является «:memory:» и journal_mode не равен WAL. Если основная база данных — «:memory:» или если для journal_mode установлено значение WAL, транзакции остаются атомарными в пределах каждого отдельного файла базы данных. Однако при сбое главного компьютера во время COMMIT, обновляющего два или более файла баз данных, изменения могут быть записаны в некоторые файлы, но не в остальные.

Существует ограничение на количество баз данных, которые можно одновременно присоединить к одному подключению к базе данных. Оно задается с помощью sqlite3_limit() и SQLITE_LIMIT_ATTACHED.

Последнее обновление этой страницы: 2025-02-06 23:19:09Z

SQLite is in the Public Domain.
https://sqlite.org/lang_attach.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API