Merge



Поддержка JavaScript отключена

SBP-Program
На главную — > Базы данных — > MySQL &nbsp

&nbsp

Merge

Merge — это тип таблиц в MySQL, который позволяет использовать одновременно несколько таблиц MyISAM. Таблицы, объединенные в Merge, должны иметь одинаковую структуру и одинаковые индексы. Даже порядок следования колонок в таблицах должен быть одинаковым.

В примере создадим две таблицы, заполним их и объединим в одну. Итак, первая таблица:

CREATE TABLE uno
( row_ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(100)) ENGINE = MyISAM;

Заполняем её:

insert into uno (name) values(‘uno’), (‘dos’), (‘tres’);

Получаем первую таблицу:

Java

Делаем вторую таблицу:

CREATE TABLE dos
( row_ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(100)) ENGINE = MyISAM;

Заполняем её:

insert into dos (name) values(‘eins’), (‘zwei’), (‘drei’)

Получаем вторую таблицу:

Java

А теперь объединим две наши таблицы в одну:

create table unoDos(
row_ID int unsigned not null auto_increment,
name char(100),
index(row_ID)) engine=Merge union=(uno, dos) insert_method=last;

В union перечислены имена объединяемых таблиц.

В каталоге нашей базы данных получаем:

Java

В файле unoDos.frm хранится структура таблицы, а в файле unoDos.MRG – имена таблиц, из которых составляется Merge-таблица, причем эти таблицы могут из других баз данных, а не только из той, в которой расположена наша Merge-таблица.

Посмотрим, что имеется в объединенной таблице:

select * from unoDos

Получаем:

Java

Таким образом содержание двух таблиц оказалось в одной, а ключевое поле row_ID перестало содержать уникальные значения. Вот почему при создании Merge-таблицы мы не указали, что поле row_ID должно быть PRIMARY KEY, ведь первичный ключ должен содержать только уникальные значения.

Если удалить Merge-таблицу, то удаляется только она, составляющие её таблицы не удаляются при этом.

В Merge-таблице можно использовать select, insert, update, delete.

При создании Merge-таблицы мы указали insert_method=last, это опция. В данном случае мы объявили, что метод insert будет добавлять новые строки в таблицу, которая заявлена последней в union, у нас это таблица dos. Если сделать так: insert_method=first, то новые строки пойдут в первую таблицу списка union. Если insert_method=no, то добавление новых строк в нашу Merge-таблицу не будет возможным.

Программирование

&nbsp
&nbsp
&nbsp