
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.
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`;