Справочное руководство по MySQL версии 4.1.1-alpha


7.2 Таблицы MERGE - часть 3


Нельзя выполнять команды DROP TABLE, ALTER TABLE, DELETE FROM table_name без оператора WHERE

REPAIR TABLE, TRUNCATE TABLE, OPTIMIZE TABLE, или ANALYZE TABLE

по отношению к таблицам, которые размещены в таблице MERGE и открыты. Если это сделать, в таблице MERGE

останутся ссылки на исходную таблицу, и полученные результаты будут совершенно непредсказуемыми. Самый легкий путь обойти эти трудности - выполнить комманду FLUSH TABLES. Это удостоверит, что ни одна таблица MERGE не будет открытой.

При создании таблицы MERGE необходимо указать при помощи UNION(list-of-tables), какие таблицы требуется использовать как одну. В случае необходимости, если требуется производить вставку в таблицу MERGE в первую или в последнюю таблицу в списке UNION, можно задать INSERT_METHOD. Если не указать INSERT_METHOD или выбрать NO, то все команды INSERT для таблицы MERGE будут выдавать ошибку.

В приведенном ниже примере показано, как использовать таблицы MERGE:

CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20)); CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20)); INSERT INTO t1 (message) VALUES ("Testing"),("table"),("t1"); INSERT INTO t2 (message) VALUES ("Testing"),("table"),("t2"); CREATE TABLE total (a INT AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

Кроме того, можно управлять файлом `.MRG', находясь за пределами сервера MySQL:

shell> cd /mysql-data-directory/current-database shell> ls -1 t1.MYI t2.MYI > total.MRG shell> mysqladmin flush-tables

Теперь можно выполнять следующие действия:

mysql> SELECT * FROM total; +---+---------+ | a | message | +---+---------+ | 1 | Testing | | 2 | table | | 3 | t1 | | 1 | Testing | | 2 | table | | 3 | t2 | +---+---------+

Обратите внимание на то, что столбец a, хотя и объявлен как PRIMARY KEY, не является уникальным, так как таблица MERGE не может обеспечивать уникальность для всех таблиц MyISAM.

Чтобы повторно преобразовать таблицу MERGE, можно выбрать один из следующих вариантов:

  • Применить к таблице команду DROP и создать ее повторно

  • Воспользоваться командой ALTER TABLE table_name UNION(...)

  • Изменить файл `.MRG' и выполнить команду FLUSH TABLE над таблицей MERGE

    и всеми базовыми таблицами, чтобы обработчик прочитал новый файл определения.




    - Начало -  - Назад -  - Вперед -



    Книжный магазин