一時テーブルを使用するMySQLストアドプロシージャがあります。テーブル名が「temp」であり、それを使用して中間データを格納するとします。手順の最初に作成され、最後に削除されます。
CREATE PROCEDURE p()
BEGIN
CREATE TEMPORARY TABLE \`temp\`(...);
INSERT INTO \`temp\` VALUES(...);
DROP TEMPORARY TABLE \`temp\`;
END;
問題は、このストアドプロシージャが異なるユーザーによって同時に使用される可能性があることです。そのため、これが問題(つまり、一時テーブルに挿入されたデータの競合)を引き起こす可能性があるかどうかを知りたいです。言い換えると、一時テーブルは同じSPへの異なる呼び出し内の共有リソースですか?
いいえ、一時テーブルはデータベース接続の範囲に制限されています。同じデータベース接続中のプロシージャへの後続の呼び出しで一時テーブルを使用できますが、他の接続はそれにアクセスできません。同じ名前でテーブルを作成できますが、各一時テーブルは独立しています。接続を閉じると、一時テーブルは消えます。
一時テーブルは、currentセッションでのみ表示されます。
したがって、複数の同時セッションがある場合、各セッションには同じ名前の独自の独立した一時テーブルがあります。
ドキュメント: http://dev.mysql.com/doc/refman/5.1/en/create-table.html 、ctrl + f for "You can use theTEMPORARY"