Open Source WEB

MERGEはMyISAMを集めたもの

テーブルの型がMERGEの場合についての説明は、 どの本を見てもあまり書かれていない。 MERGEの実体はMyISAMであると書かれていても、 実際にMERGEテーブルを作る具体的記述が滅多に存在しない。

困ったなと思った時に参考にすべき書籍 "MySQL", by Paul Dubois, DEVELOPER'S LIBRARY, SAMS Publishing を見たら、ちゃんとMERGEの使い方が説明してあった。 この本は、本当にMySQLのバイブルだ。

 

まず、普通にMyISAMのテーブルを複数個作る。 そのとき、テーブルの構造は完全に一致している必要があり、 テーブルの名称だけが別のものをつくる。

ここでは、市区町村のデータを管理するために、以下のような 形式のテーブルを作ることにしよう。

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| 名称  | varchar(10) | YES  |     | NULL    |       |
| 読み  | varchar(20) | YES  |     | NULL    |       |
| 人口  | int(11)     | YES  |     | NULL    |       |
| 面積  | float(10,2) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

日本の市区町村の数くらいだったら、 MERGEにする必要などないのだが、 これは単なるテストなのであれこれ詮索するのは止めよう。

テーブルを都道府県単位で作ることにし、全体をまとめたものを 「都道府県」という名称のMERGEテーブルにしよう。

まず、MyISAMテーブルを作らなければならない。 最初に、「東京」を作ろう。 デフォルトキャラクタセットは、ここでは eucjpms にしておく。

CREATE TABLE `東京` (
    `名称` VARCHAR(10), `読み` VARCHAR(20), `人口` INT, `面積` FLOAT(10,2)
) ENGINE=MyISAM DEFAULT CHARSET=eucjpms;

東京都の全市区町村のデータを入れるのは面倒なので、 以下のように一部のデータだけを入れてみた。

INSERT INTO `東京` VALUES
('千代田区','ちよだく',39551,11.64),
('中央区','ちゅうおうく',87416,10.15),
('新宿区','しんじゅくく',299808,18.23),
('世田谷区','せたがやく',835702,58.08),
('調布市','ちょうふし',214032,21.53),
('町田市','まちだし',405008,71.62),
('大島町','おおしままち',8786,91.06),
('檜原村','ひのはらむら',3004,105.42),
('小笠原村','おがさわらむら',2755,104.41);

次に、まったく同じ構造の「北海道」というテーブルを作る。 「東京」が「北海道」になるだけで、他はまったく同じである。

CREATE TABLE `北海道` (
    `名称` VARCHAR(10), `読み` VARCHAR(20), `人口` INT, `面積` FLOAT(10,2)
) ENGINE=MyISAM DEFAULT CHARSET=eucjpms;

こちらも、データを入れておこう。

INSERT INTO `北海道` VALUES
('中央区','ちゅうおうく',196489,46.42),
('豊平区','とよひらく',209021,46.35),
('旭川市','あさひかわし',356931,747.60),
('歌志内市','うたしないし',5396,55.99),
('北見市','きたみし',110995,421.08),
('ニセコ町','にせこちょう',4642,197.13),
('羅臼町','らうすちょう',6717,397.84);

これで、それぞれのテーブルの内容を見ると、当然以下のようになっている。

mysql> SELECT * FROM `東京`;
+----------+----------------+--------+--------+
| 名称     | 読み           | 人口   | 面積   |
+----------+----------------+--------+--------+
| 千代田区 | ちよだく       |  39551 |  11.64 |
| 中央区   | ちゅうおうく   |  87416 |  10.15 |
| 新宿区   | しんじゅくく   | 299808 |  18.23 |
| 世田谷区 | せたがやく     | 835702 |  58.08 |
| 調布市   | ちょうふし     | 214032 |  21.53 |
| 町田市   | まちだし       | 405008 |  71.62 |
| 大島町   | おおしままち   |   8786 |  91.06 |
| 檜原村   | ひのはらむら   |   3004 | 105.42 |
| 小笠原村 | おがさわらむら |   2755 | 104.41 |
+----------+----------------+--------+--------+
9 rows in set (0.01 sec)
 
mysql> SELECT * FROM `北海道`;
+----------+--------------+--------+--------+
| 名称     | 読み         | 人口   | 面積   |
+----------+--------------+--------+--------+
| 中央区   | ちゅうおうく | 196489 |  46.42 |
| 豊平区   | とよひらく   | 209021 |  46.35 |
| 旭川市   | あさひかわし | 356931 | 747.60 |
| 歌志内市 | うたしないし |   5396 |  55.99 |
| 北見市   | きたみし     | 110995 | 421.08 |
| ニセコ町 | にせこちょう |   4642 | 197.13 |
| 羅臼町   | らうすちょう |   6717 | 397.84 |
+----------+--------------+--------+--------+
7 rows in set (0.00 sec)
 
mysql>

2つのテーブルを合わせたものはどうやったら作れるだろうか。

mysql> SELECT * FROM `東京`,`北海道`;
+----------+----------------+--------+--------+----------+--------------+--------+--------+
| 名称     | 読み           | 人口   | 面積   | 名称     | 読み         | 人口   | 面積   |
+----------+----------------+--------+--------+----------+--------------+--------+--------+
| 千代田区 | ちよだく       |  39551 |  11.64 | 中央区   | ちゅうおうく | 196489 |  46.42 |
| 千代田区 | ちよだく       |  39551 |  11.64 | 豊平区   | とよひらく   | 209021 |  46.35 |
| 千代田区 | ちよだく       |  39551 |  11.64 | 旭川市   | あさひかわし | 356931 | 747.60 |
| 千代田区 | ちよだく       |  39551 |  11.64 | 歌志内市 | うたしないし |   5396 |  55.99 |
| 千代田区 | ちよだく       |  39551 |  11.64 | 北見市   | きたみし     | 110995 | 421.08 |
| 千代田区 | ちよだく       |  39551 |  11.64 | ニセコ町 | にせこちょう |   4642 | 197.13 |
| 千代田区 | ちよだく       |  39551 |  11.64 | 羅臼町   | らうすちょう |   6717 | 397.84 |
| 中央区   | ちゅうおうく   |  87416 |  10.15 | 中央区   | ちゅうおうく | 196489 |  46.42 |
| 中央区   | ちゅうおうく   |  87416 |  10.15 | 豊平区   | とよひらく   | 209021 |  46.35 |
| 中央区   | ちゅうおうく   |  87416 |  10.15 | 旭川市   | あさひかわし | 356931 | 747.60 |

    ..... 中略  ......

| 檜原村   | ひのはらむら   |   3004 | 105.42 | 北見市   | きたみし     | 110995 | 421.08 |
| 檜原村   | ひのはらむら   |   3004 | 105.42 | ニセコ町 | にせこちょう |   4642 | 197.13 |
| 檜原村   | ひのはらむら   |   3004 | 105.42 | 羅臼町   | らうすちょう |   6717 | 397.84 |
| 小笠原村 | おがさわらむら |   2755 | 104.41 | 中央区   | ちゅうおうく | 196489 |  46.42 |
| 小笠原村 | おがさわらむら |   2755 | 104.41 | 豊平区   | とよひらく   | 209021 |  46.35 |
| 小笠原村 | おがさわらむら |   2755 | 104.41 | 旭川市   | あさひかわし | 356931 | 747.60 |
| 小笠原村 | おがさわらむら |   2755 | 104.41 | 歌志内市 | うたしないし |   5396 |  55.99 |
| 小笠原村 | おがさわらむら |   2755 | 104.41 | 北見市   | きたみし     | 110995 | 421.08 |
| 小笠原村 | おがさわらむら |   2755 | 104.41 | ニセコ町 | にせこちょう |   4642 | 197.13 |
| 小笠原村 | おがさわらむら |   2755 | 104.41 | 羅臼町   | らうすちょう |   6717 | 397.84 |
+----------+----------------+--------+--------+----------+--------------+--------+--------+


FROMの後にテーブルを並べたのでは、 それらのテーブルの全組合せ(積)になってしまい、 まったく意味をなさない。

ということで、これをMERGEで1つのテーブルにしてしまうのは、 次回までに調べておくことにしよう。 最初に説明した "MySQL"の本、あるいはMySQLのオンラインマニュアルを見れば 分るのだが、どちらも英文なのである。


戻る:テーブルがBDBの場合はどうなるか

次へ:MERGEテーブルの定義方法


フィードバック:

Name:
Comment:
Choi: (Sat Feb 18 09:01:05 2012 )
Big help, big help. And superlative news of cosure.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us