中間結果を格納するために一時データ テーブルを使用したい 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 インメモリ テーブルを誤解していませんか? おそらく、より良いアプローチがありますか?