Open Source WEB

前回、「都道府県」テーブルを、「日本」というデータベースの下に作り、 現在、以下のようにデータが入っている。

mysql> SELECT * FROM `都道府県`;
+----------+----------+
| 名       | 都       |
+----------+----------+
| 神奈川県 | 横浜市   |
| 山梨県   | 甲府市   |
| 北海道   | 札幌市   |
| 愛知県   | 名古屋市 |
+----------+----------+
4 rows in set (0.00 sec)
 
mysql>

どうテーブルを作ったかは、SHOW CREATE TABLE でわかるが

mysql> SHOW CREATE TABLE `都道府県`\G
*************************** 1. row ***************************
       Table: 都道府県
Create Table: CREATE TABLE `都道府県` (
  `名` varchar(20) default NULL,
  `都` varchar(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=eucjpms
1 row in set (0.00 sec)
 
mysql>

これによると、データベースエンジンとして MyISAMが指定されている。

このとき、このテーブルはどこに、どのように実現されているのであろうか。

今の私の環境では、 /usr/local/mysql/var が MySQLのデータディレクトリである。

データベース「日本」は、その下にあるディレクトリである。

shellもターミナルも文字コードは既にUTF-8(ja_JP.utf8)にしてある。

shell# LANG=ja_JP.utf8
shell# ls
             内緒

drwx------    2 mysql    mysql        4096 10月  5 18:53 日本

shell# cd 日本
shell# ls
db.opt  都道府県.MYD  都道府県.MYI  都道府県.frm
shell# 

となり、テーブル名はUTF-8のファイル名として利用されていることがわかる。

MySQLでは、テーブル名がファイル名の拡張子を除いた部分になり、 拡張子は使用するデータベースエンジンにより異なる。 拡張子の名前だけではなく、作られるファイル数が異なる。

MyISAMの場合:

テーブル名.frm   テーブル定義が記述されているファイル

テーブル名.MYD   データを保存するファイル

テーブル名.MYI   インデックスを保存するファイル


コピー実験

データベースの場合、ディレクトリをコピーしたら新しいデータベースができた。

同じこと、つまりテーブルを構成するファイルをコピーしたら テーブルがコピーされるかどうか確認してみよう。 コピーして出来たファイルが、元のファイルと同じgroup, ownerになるように、 cp -p でコピーする。

shell# ls
db.opt  都道府県.MYD  都道府県.MYI  都道府県.frm
shell# cp -p 都道府県.MYD コピー.MYD
shell# cp -p 都道府県.MYI コピー.MYI
shell# cp -p 都道府県.frm コピー.frm
shell# ls -l
db.opt      コピー.MYI  都道府県.MYD  都道府県.frm
コピー.MYD  コピー.frm  都道府県.MYI
#shell

ファイルはちゃんとコピー、それも漢字を使ったファイル名にしたので、 漢字のテーブル名「コピー」でテーブルができているか確認しよう。

mysql> SHOW TABLES;
+----------------+
| Tables_in_日本 |
+----------------+
| コピー         |
| 都道府県       |
+----------------+
2 rows in set (0.00 sec)
 
mysql>

ちゃんと出来たと認識されているようだ。 データを追加したり、削除したりして、大丈夫か確認してみよう。

mysql> INSERT INTO `コピー` VALUES('宮城県','仙台市');
Query OK, 1 row affected (0.00 sec)
 
mysql> DELETE FROM `コピー` WHERE `名`='山梨県';
Query OK, 1 row affected (0.03 sec)
 
mysql> SELECT * from `コピー`;
+----------+----------+
| 名       | 都       |
+----------+----------+
| 神奈川県 | 横浜市   |
| 北海道   | 札幌市   |
| 愛知県   | 名古屋市 |
| 宮城県   | 仙台市   |
+----------+----------+
4 rows in set (0.00 sec)
 
mysql>

間違いなく動いているようである。


戻る:テーブルの作成、確認、削除

次へ:テーブルがInnoDBの場合はどうなるか


フィードバック:

Name:
Comment:

There is no comment.

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

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