MySQLの同じ名前の2つのテーブル


8

今日、一時テーブルを削除したときに、この奇妙な問題が発生しました。確認のために一時テーブルを削除し、テーブルを記述しました。しかし、テーブルは削除されませんでした。いくつか検索したところ、次のことがわかりました。

MySQLでは、永続テーブルと同じ名前の一時テーブルを作成できます。そのため、一時テーブルは削除され、永続テーブルは削除されませんでした。作業しているテーブルが本当に混乱しました。

MySQLバージョン:5.1.36-enterprise-gpl-pro-log

これは私がテストしたものです:

mysql> create table test(id int);
Query OK, 0 rows affected (0.00 sec)

mysql> desc test;

| Field | Type    | Null | Key | Default | Extra |
--------------------------------------------------
 id       int(11)   YES           NULL

 mysql> create temporary table test(id int);
 Query OK, 0 rows affected (0.00 sec)



mysql> desc test;

| Field | Type    | Null | Key | Default | Extra |
--------------------------------------------------
 id       int(11)   YES           NULL


mysql> drop table test;
 Query OK, 0 rows affected (0.00 sec)

 mysql> desc test;

| Field | Type    | Null | Key | Default | Extra |
--------------------------------------------------
 id       int(11)   YES           NULL

これはバグですか、これを克服する別の方法はありますか?

回答:


6

MySQLでは、同じ「スコープ」を持たないため、既存の名前で一時テーブルを作成できます。一時テーブルはセッションでのみ表示され、セッションの終了時に削除されます。同じ名前の場合、MySQLは一時テーブルを削除するまで元のテーブルを「非表示」にします。

MySQLドキュメントの一時テーブルセクションを参照できます。

マックス。


1
同じセッションで永続テーブルと同じ名前の一時テーブルがあるときに、永続テーブルにいくつかのレコードを挿入する必要がある場合はどうなりますか?
BALA、2014

できません。テーブルにプレフィックスを付けるか、別の名前を見つける必要があります。
Maxime Fouilleul 2014

1
@BALA、一時テーブルは「実際の」データベースに存在する必要はないので、「偽の」データベースに単に置くことができますcreate temporary table fake_db.t as select*from t。例:
Pacerier

1

マニュアルから(CREATE TABLE):

TEMPORARYテーブルは現在のセッションでのみ表示され、セッションが閉じられると自動的に削除されます。これは、2つの異なるセッションが互いに、または同じ名前の既存の非TEMPORARYテーブルと競合することなく、同じ一時テーブル名を使用できることを意味します。(既存のテーブルは、一時テーブルが削除されるまで非表示になります。)

つまり、既存のテーブルと同じ名前の一時テーブルを作成した後は、その名前では通常のテーブルにアクセスできず、一時セッションのみ(そのセッション中)にアクセスできます。エラーのためにスペースが開くと思われる場合は、一時テーブルに別の名前を使用します(たとえば、prefixを使用しますtemp_)。これは簡単で、混乱の余地はありません。


0

あなたは最初の質問でこの質問に答えました。あなたは「ない必要があるため永久テーブルにレコードを挿入するには...同じ名前....一時テーブル...同じセッションを」あなたはテーブル名を管理しています!

(@SpeedyGonsalesによって参照される)混乱を避けるため、一時テーブルに接頭辞/接尾辞tmp _ / _ tmpまたは同様のものが指定されていることを確認するだけです。

この種の間違いを今している場合は、1年以内に誰かがシステムを初めて使用する人がどれほど簡単になるか考えてみてください。あなたの組織(それがあなただけの場合でも!)には命名規則が必要です。そうでなければ、この種のSNAFUが得られます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.