Оператор 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