Login

Welcome to the Federated Tables of MySQL

Heute möchte ich auf ein äusserst nützliches Feature von MySQL eingehen: Federated Tables. Federate(d) heisst zu Deutsch föderiert, verbündet. Ich, als Präsident der Föderierten Tabellen von MyS... lassen wir das.

Federated Tables of MySQL and Mysqlasia

Hinter dem Begriff Federated Tables verbirgt sich eine Technik zum Verlinken (/Verb(i|ü)nden/) von Tabellen über die Grenzen einer Datenbank, ja gar eines Datenbankservers, hinweg. Man kann sich das wie einen Symlink unter *NIX, bzw. einer Verknüpfung unter Windows vorstellen.

Ein kleines Beispiel

Erstellen wir erst mal zwei kleine Testdatenbanken.

CREATE DATABASE `fedtable_1` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `fedtable_2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Anschliessend legen wir eine stinknormale Tabelle in der ersten Datenbank an ...

CREATE TABLE `fedtable_1`.`normal` (
    `id` INT(3) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `firstname` VARCHAR(30) NOT NULL
)
ENGINE = MYISAM

... und füllen sie mit ein paar Einträgen.

INSERT INTO `fedtable_1`.`normal` (`id`, `firstname`)
VALUES (NULL, 'entry1'),
       (NULL, 'entry2'),
       (NULL, 'entry3'),
       (NULL, 'entry4'),
       (NULL, 'entry5');

Um jetzt eine Federated Table zu erstellen, müssen wir lediglich die ENGINE auf FEDERATED stellen und einen zusätzlichen CONNECTION String mitgeben.

CREATE TABLE `fedtable_2`.`federated` (
    `id` INT(3) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `firstname` VARCHAR(30) NOT NULL
)
ENGINE=FEDERATED
CONNECTION='mysql://root@127.0.0.1/fedtable_1/normal';

Jetzt können wir in der Datenbank fedtable_2 mit der Tabelle federated wie gewohnt arbeiten. In Wirklichkeit greifen wir aber auf die Tabelle normal der Datenbank fedtable_1 zu. Praktisch und einfach.

SELECT * FROM `fedtable_2`.`federated`;

Folgendes gilt es zu beachten

  • Die Struktur der Federated Table muss der Strukut der Quelltabelle entsprechen
  • Die Indexe sollten aus Performancegründen stets in beiden Tabellen gesetzt werden
Danke! :-)