私は別のものに1つのテーブルを "アトミックに"コピーしようとしています。基本的には、テーブルを定期的に更新して、別のプロセスがテーブルを更新している場合に、テーブルから読み取るプロセスで不完全な結果が得られないようにしたい。1つのMySQLテーブルを別のものにアトミックにコピーしていますか?
背景情報を提供するには、ゲームのリーダーボードとして機能するテーブルが必要です。このリーダーボードは、数分ごとに別のプロセスで更新されます。私の考えは次の通りです:
テーブルSCORESには、ユーザーがリーダーボードを閲覧したときに読み込まれる公開閲覧可能なリーダーボードが含まれています。この表は数分ごとに更新されます。リーダーボードを更新するプロセスによって、新しいリーダーボードを含むSCORES_TEMPテーブルが作成されます。そのテーブルが作成されたら、すべての内容を「原子的に」SCORESにコピーしたいと思います。私がしたいことは、次のようなものです:
TRUNCATE TABLE SCORES;
INSERT INTO SCORES SELECT * FROM SCORES_TEMP;
私はSCORESのすべてを置き換えたいと思います。私は私の主キーまたは自動インクリメント値を維持する必要はありません。 SCORES_TEMPからすべてのデータを取り込みたいだけです。しかし、私は、これらの2つのステートメントが実行される前に誰かがスコアを見ると、リーダーボードが空白になることを知っています。これを原子的に行うと、空白や不完全なデータが表示されません。ありがとう! MySQLでは
トランザクションは間違いなく私が彼らが持っている原子的ニーズを達成することができると分かっていますが、この表の名前を変更するソリューションはこれに最適です特定の状況。みんな、ありがとう! – DivideByHero