web-dev-qa-db-ja.com

MySQL Temporaryテーブルは共有リソースですか?

一時テーブルを使用するMySQLストアドプロシージャがあります。テーブル名が「temp」であり、それを使用して中間データを格納するとします。手順の最初に作成され、最後に削除されます。

CREATE PROCEDURE p()
BEGIN

CREATE TEMPORARY TABLE \`temp\`(...);

INSERT INTO \`temp\` VALUES(...);

DROP TEMPORARY TABLE \`temp\`;

END;

問題は、このストアドプロシージャが異なるユーザーによって同時に使用される可能性があることです。そのため、これが問題(つまり、一時テーブルに挿入されたデータの競合)を引き起こす可能性があるかどうかを知りたいです。言い換えると、一時テーブルは同じSPへの異なる呼び出し内の共有リソースですか?

33

いいえ、一時テーブルはデータベース接続の範囲に制限されています。同じデータベース接続中のプロシージャへの後続の呼び出しで一時テーブルを使用できますが、他の接続はそれにアクセスできません。同じ名前でテーブルを作成できますが、各一時テーブルは独立しています。接続を閉じると、一時テーブルは消えます。

50
Bill Karwin

一時テーブルは、currentセッションでのみ表示されます。

したがって、複数の同時セッションがある場合、各セッションには同じ名前の独自の独立した一時テーブルがあります。

ドキュメント: http://dev.mysql.com/doc/refman/5.1/en/create-table.html 、ctrl + f for "You can use theTEMPORARY"

14
zerkms