Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
一時テーブルの作り方は、CREATE TABLE の2語の間に、 TEMPORARY が入っていると一時テーブルが作られる。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] ...
では、いつものように適当なテーブル名で作ってみよう。
mysql> CREATE TEMPORARY TABLE `関東` (`名` varchar(20), `都` varchar(20))
-> DEFAULT CHARACTER SET eucjpms;
Query OK, 0 rows affected (0.17 sec)
mysql> SHOW CREATE TABLE `関東`\G
*************************** 1. row ***************************
Table: 関東
Create Table: CREATE TEMPORARY TABLE `関東` (
`名` varchar(20) default NULL,
`都` varchar(20) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=eucjpms
1 row in set (0.00 sec)
mysql>
さて、一時テーブルができたはずなので、テーブルのリスト表示をしてみよう。
mysql> show tables; Empty set (0.00 sec) mysql>
しかし、何も表示されない。
英文マニュアルのA.7.3. TEMPORARY TABLE Problems という個所に
The SHOW TABLES statement does not list TEMPORARY tables.
とあるので、SHOW TABLE では見えないようだ。
一時テーブルは、SHOW TABLES では見えない。
確認するには、実際に作ったテーブルを使ってみないといけないようだ。
mysql> INSERT INTO `関東` VALUES ('神奈川県', '横浜市');
Query OK, 1 row affected (0.00 sec)
mysql> select * from `関東`;
+----------+--------+
| 名 | 都 |
+----------+--------+
| 神奈川県 | 横浜市 |
+----------+--------+
1 row in set (0.01 sec)
mysql>
他のセッションからは見えない
同じユーザで、もう1つ別のセッションで同じMySQLサーバに繋いで、 いま作った一時テーブル `関東` が見られるか調べてみよう。
shell$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 to server version: 5.0.15-standard-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SET NAMES utf8; Query OK, 0 rows affected (0.00 sec) mysql> USE test; Database changed mysql> SELECT * FROM `関東`; ERROR 1146 (42S02): Table 'test.関東' doesn't exist mysql>
ということで、他のセッションからは隠されている。
一時テーブル名の変更
RENAME TABLE を使って変更しようとすると、
mysql> RENAME TABLE `関東` TO `関東甲信越`; ERROR 1017 (HY000): Can't find file: './test/関東.frm' (errno: 2) mysql>
となって、何と、該当データベースの下にテーブルフォーマットファイルが 在ると勝手に仮定してエラーを出してしまう。
では、変更はできないのかというと、そうではない。
mysql> ALTER TABLE `関東` RENAME `関東甲信越`;
Query OK, 1 row affected (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> INSERT INTO `関東甲信越` VALUES ('山梨県','甲府市');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM `関東甲信越`;
+----------+--------+
| 名 | 都 |
+----------+--------+
| 神奈川県 | 横浜市 |
| 山梨県 | 甲府市 |
+----------+--------+
2 rows in set (0.00 sec)
mysql>
ということで、名前を変更し、新しい名前でデータを追加し、確認もできた。 すべて大丈夫みたいだ。
さまざまな型の一時テーブル
様々な型、つまりデフォルトでできたMyISAMだけでなく、 InnoDB, HEAP, MERGE についても調べるべきだが、面倒なのでやらない。
一時テーブルはファイルにはならない、つまり一時的なテーブルなので、 セッションが終ると生滅してしまうので、ファイルにならないのである。 だから、MySQLのデータディレクトリ以下を調べても該当ファイルは 見つからないのだが、これも面倒なのでやらない。
神経質に言えば、まだまだ詳細に調べないといけないのだが、 このあたりで一時テーブルについては終えることにしよう。 興味のある方、疑い深い方は、しっかり調べて、 もし何かおかしな挙動を発見したら知らせてくれると助かる。
フィードバック: