1

中間結果を格納するために一時データ テーブルを使用したい MySQL ストアド ルーチンがあります「通常の」テーブルを作成する必要がないように、ルーチンの実行が完了すると消えるメモリ内テーブルを使用したいと考えています。私はMySQLの初心者ですが、これが進むべき道だと思います:

DROP TABLE IF EXISTS MyInMemoryTable;
CREATE TABLE MyInMemoryTable ( numberField int ) ENGINE = MEMORY;
...
DROP TABLE IF EXISTS MyInMemoryTable;

私のルーチンは 1 人のユーザーに対して機能しますが、複数のユーザーが同時にルーチンを実行するとどうなるか心配です。

MyInMemoryTable ルーチンを実行している各ユーザー セッションに対してローカルであるため、このテーブルの多くのインスタンスが (競合なしで) 同時に存在する可能性がありますか? それとも、すべてのユーザーに対してMyInMemoryTable単一のグローバルテーブルを使用しているため、さまざまなユーザーのデータがテーブル内で混同される危険性がありますか? それとも、別のユーザーがルーチンの実行で忙しい場合、あるユーザーがデータベース エラーになる危険性がありますか?

ドキュメントには、MEMORYエンジンが各テーブルをディスク ファイルに関連付けると書かれていますが、「テーブルMEMORYはディスク テーブルに変換されることはありません」とも書かれています。

MySQL インメモリ テーブルを誤解していませんか? おそらく、より良いアプローチがありますか?

4

2 に答える 2

3

一時テーブルを作成します。

CREATE TEMPORARY TABLE ...;

これらのテーブルは共有されず、接続が終了すると削除されます。

メモリ テーブルの標準は、おそらく共有され、グローバルです。

于 2011-11-18T08:27:24.780 に答える