Внутренние и внешние таблицы
Существует две основные категории файловых таблиц CONNECT: внутренние и внешние. Они описаны ниже.
Внешние таблицы
Таблицы считаются «внешними», когда имя файла указано в операторе CREATE TABLE с помощью опции file_name.
Во-первых, помните, что CONNECT реализует механизм управления внешними данными (MED). Это означает, что «настоящие» таблицы CONNECT — «внешние таблицы» — основаны на данных, принадлежащих файлам, которые могут быть созданы другими приложениями или импортированы из другой СУБД.
Поэтому их данные являются «ценными» и не должны изменяться, кроме как с помощью специальных команд, таких как INSERT, UPDATE или DELETE. Для других команд, таких как CREATE, DROP или ALTER, их данные никогда не изменяются или не удаляются.
Внешние таблицы могут быть созданы на существующих файлах или внешних таблицах. При их удалении удаляется только локальное описание, файл или внешняя таблица не удаляются или не стираются. Кроме того, DROP TABLE не удаляет индексы.
ALTER TABLE генерирует следующее предупреждение в качестве напоминания:
Warning (Code 1105): This is an outward table, table data were not modified.
Если указанный файл не существует, он создается при вставке данных в таблицу. Если перед созданием файла выполняется SELECT, генерируется следующая ошибка:
Warning (Code 1105): Open(rb) error 2 on <file_path>: No such file or directory
Изменение внешних таблиц
Когда выполняется ALTER TABLE, он просто изменяет определение таблицы соответственно, не изменяя данные. ALTER может безопасно использоваться для изменения таких параметров, как MAPPED, HUGE или READONLY, но с особой осторожностью при изменении определений столбцов или параметров порядка, потому что некоторые параметры столбцов, такие как FLAG, также должны быть изменены или могут стать неправильными.
Изменение типа таблицы с помощью ALTER часто не имеет смысла. Но многие подозрительные изменения могут быть приемлемыми, если они предназначены только для исправления существующего неправильного определения.
Перевод таблицы CONNECT в другой движок допустим, но обратное запрещено, когда целевая таблица CONNECT не основана на таблицах или когда существует её файл данных (потому что когда данные целевой таблицы не могут быть изменены, а исходная таблица удаляется, данные таблицы будут потеряны). Однако это можно сделать для создания новых файловых таблиц, если файл не существует или пуст.
Создание или удаление индексов допустимо, так как это не изменяет данные таблицы. Однако часто небезопасно делать это с помощью оператора ALTER TABLE, содержащего другие изменения.
Конечно, все изменения приемлемы для пустых таблиц.
Примечание: Использование внешних таблиц требует привилегии FILE.
Внутренние таблицы
Особым типом файловых таблиц CONNECT являются «внутренние» таблицы. Это файловые таблицы, имя файла которых не указано в операторе CREATE TABLE (опция file_name отсутствует).
Их файл будет расположен в текущем каталоге базы данных, а его имя по умолчанию будет tablename.type, где tablename — имя таблицы, а type — тип таблицы, приведенный к нижнему регистру. При создании без использования оператора CREATE TABLE ... SELECT ..., пустой файл создается во время создания, и их можно заполнить дополнительными вставками.
Они ведут себя как таблицы других хранилищ и, в отличие от внешних таблиц CONNECT, они удаляются при удалении таблицы. Конечно, они не должны быть только для чтения, чтобы быть пригодными для использования. Несмотря на ограниченность их функциональности, они могут использоваться для тестирования или когда у пользователя нет привилегии FILE.
Изменение внутренних таблиц
Следует знать, что поскольку CONNECT создаёт индексы определённым образом, все изменения индексов выполняются с помощью алгоритма «на месте» — без использования временной таблицы. Вот почему, если в операторе ALTER TABLE указаны индексы вместе с другими изменениями, которые не могут быть выполнены «на месте», оператор не может быть выполнен и вызывает ошибку.
Преобразование внутренней таблицы во внешнюю с помощью оператора ALTER TABLE, указывающего новое имя файла и/или новый тип таблицы, ограничено так же, как и при преобразовании таблицы из другого движка во внешнюю таблицу. Однако нет ограничений на преобразование таблицы другого движка во внутреннюю таблицу CONNECT.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/inward-and-outward-tables/