Spec-Zone.ru › MariaDB

Тип таблицы CONNECT TBL: Список таблиц

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

Список столбцов таблицы TBL необязательно должен включать все столбцы таблиц списка. Если имя некоторых столбцов различно в подтаблицах, столбец для использования можно указать по его позиции, заданной параметром FLAG столбца. Если параметр ACCEPT установлен в значение true (Y или 1), столбцы, которые отсутствуют в некоторых подтаблицах, принимаются, а их значение будет NULL или псевдо-NULL (что зависит от возможности NULL для столбца) для таблиц, не имеющих этот столбец. Типы столбцов также могут быть различными, и при необходимости будет выполнено автоматическое преобразование.

Примечание: Если не указано иное, определения столбцов извлекаются из первой таблицы списка таблиц.

База данных по умолчанию для подтаблиц — текущая база данных, или же, если нет, может быть указана в параметре DBNAME. Для таблиц, которые не находятся в базе данных по умолчанию, это может быть указано в списке таблиц. Например, чтобы создать таблицу на основе французской таблицы employe в текущей базе данных и на основе английской таблицы employee базы данных db2, синтаксис оператора создания может быть:

CREATE TABLE allemp (
  SERIALNO char(5) NOT NULL flag=1,
  NAME varchar(12) NOT NULL flag=2,
  SEX smallint(1),
  TITLE varchar(15) NOT NULL flag=3,
  MANAGER char(5) DEFAULT NULL flag=4,
  DEPARTMENT char(4) NOT NULL flag=5,
  SECRETARY char(5) DEFAULT NULL flag=6,
  SALARY double(8,2) NOT NULL flag=7)
ENGINE=CONNECT table_type=TBL
table_list='employe,db2.employee' option_list='Accept=1';

Поиск столбцов в подтаблицах осуществляется по имени и, если они существуют с другим именем, по их позиции, указанной ненулевым параметром FLAG. Столбец sex существует только в английской таблице (FLAG это 0). Его значения будут иметь значение NULL для французской таблицы.

Например, запрос:

select name, sex, title, salary from allemp where department = 318;

Может вернуть:

NAME SEX TITLE SALARY
BARBOUD NULL VENDEUR 9700.00
MARCHANT NULL VENDEUR 8800.00
MINIARD NULL ADMINISTRATIF 7500.00
POUPIN NULL INGENIEUR 7450.00
ANTERPE NULL INGENIEUR 6850.00
LOULOUTE NULL SECRETAIRE 4900.00
TARTINE NULL OPERATRICE 2800.00
WERTHER NULL DIRECTEUR 14500.00
VOITURIN NULL VENDEUR 10130.00
BANCROFT 2 SALESMAN 9600.00
MERCHANT 1 SALESMAN 8700.00
SHRINKY 2 ADMINISTRATOR 7500.00
WALTER 1 ENGINEER 7400.00
TONGHO 1 ENGINEER 6800.00
HONEY 2 SECRETARY 4900.00
PLUMHEAD 2 TYPIST 2800.00
WERTHER 1 DIRECTOR 14500.00
WHEELFOR 1 SALESMAN 10030.00

Первые 9 строк, взятые из французской таблицы, имеют значение NULL для столбца sex. Они имели бы значение 0, если столбец sex был создан как NOT NULL.

Подтаблицы неподключенных движков

Подтаблицы доступны как таблицы PROXY. Для подтаблиц, не являющихся подключенными, которые доступны через API MySQL, возможно, как и с PROXY, изменить параметры по умолчанию MySQL. Конечно, это будет применяться ко всем неподключенным таблицам списка.

Использование специального столбца TABID

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

Рассмотрим следующий пример, где t1 и t2 — таблицы MyISAM, похожие на те, которые описаны в MERGE:

create table xt1 (
  a int(11) not null,
  message char(20))
engine=CONNECT table_type=MYSQL tabname='t1'
option_list='database=test,user=root';

create table xt2 (
  a int(11) not null,
  message char(20))
engine=CONNECT table_type=MYSQL tabname='t2'
option_list='database=test,user=root';

create table toto (
  tabname char(8) not null special='TABID',
  a int(11) not null,
  message char(20))
engine=CONNECT table_type=TBL table_list='xt1,xt2';

select * from total;

Результат, возвращаемый оператором SELECT, таков:

tabname a message
xt1 1 Testing
xt1 2 table
xt1 3 t1
xt2 1 Testing
xt2 2 table
xt2 3 t2

Теперь, если вы отправите запрос:

select * from total where tabname = 'xt2';

CONNECT проанализирует условие WHERE и прочитает только таблицу xt1. Это может сэкономить время, если вам нужно получить только несколько подтаблиц из таблицы TBL, содержащей много подтаблиц.

Параллельное выполнение

Параллельное выполнение в настоящее время недоступно до исправления некоторых ошибок.

Когда подтаблицы находятся на разных серверах, можно выполнить удаленные запросы одновременно, а не последовательно. Для этого установите параметр thread в значение yes.

Дополнительные параметры, доступные для этого типа таблиц:

Параметр Описание
Maxerr Максимальное количество отсутствующих таблиц в списке таблиц перед возникновением ошибки. По умолчанию 0.
Accept Если true, отсутствующие столбцы принимаются и возвращаются значения NULL. По умолчанию false.
Thread Если true, включает параллельное выполнение удаленных подтаблиц.

Эти параметры могут быть указаны в OPTION_LIST.

Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/connect-tbl-table-type-table-list/

Spec-Zone.ru

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