title: Atomically copying one MySQL table over another?
body: <p>I am trying to copy one table over another one "atomically".  Basically I want to update a table periodically, such that a process that reads from the table will not get an incomplete result if another process is updating the table.</p>
  
  <p>To give some background info, I want a table that acts as a leaderboard for a game.  This leaderboard will update every few minutes via a separate process.  My thinking is as follows:</p>
  
  <p>Table SCORES contains the publicly-viewable leaderboard that will be read from when a user views the leaderboard.  This table is updated every few minutes.  The process that updates the leaderboard will create a SCORES_TEMP table that contains the new leaderboard.  Once that table is created, I want to copy all of its contents over to SCORES "atomically".  I think what I want to do is something like:</p>
  
  <pre><code>TRUNCATE TABLE SCORES;
  INSERT INTO SCORES SELECT * FROM SCORES_TEMP;
  </code></pre>
  
  <p>I want to replace everything in SCORES.  I don't need to maintain my primary keys or auto increment values.  I just want to bring in all the data from SCORES_TEMP.  But I know that if someone views the scores before these 2 statements are done, the leaderboard will be blank.  How can I do this atomically, such that it will never show blank or incomplete data?  Thanks!</p>