Eine MySQL-Tabelle auf eine andere kopieren?

8

Ich versuche eine Tabelle "atomisch" über eine andere zu kopieren. Grundsätzlich möchte ich eine Tabelle regelmäßig aktualisieren, so dass ein Prozess, der aus der Tabelle liest, kein unvollständiges Ergebnis erhält, wenn ein anderer Prozess die Tabelle aktualisiert.

Um Hintergrundinformationen zu erhalten, möchte ich eine Tabelle, die als Rangliste für ein Spiel dient. Diese Rangliste wird alle paar Minuten in einem separaten Prozess aktualisiert. Mein Denken ist wie folgt:

Table SCORES enthält das öffentlich sichtbare Leaderboard, das gelesen wird, wenn ein Benutzer das Leaderboard anzeigt. Diese Tabelle wird alle paar Minuten aktualisiert. Der Prozess, der das Leaderboard aktualisiert, erstellt eine SCORES_TEMP-Tabelle, die das neue Leaderboard enthält. Sobald diese Tabelle erstellt ist, möchte ich ihren gesamten Inhalt "atomar" nach SCORES kopieren. Ich denke, was ich tun möchte ist etwas wie:

%Vor%

Ich möchte alles in SCORES ersetzen. Ich muss meine Primärschlüssel oder Autoinkrementwerte nicht beibehalten. Ich möchte nur alle Daten von SCORES_TEMP einbringen. Aber ich weiß, dass die Rangliste leer bleibt, wenn jemand die Ergebnisse vor diesen 2 Anweisungen sieht. Wie kann ich das atomar machen, so dass niemals leere oder unvollständige Daten angezeigt werden? Danke!

    
DivideByHero 01.06.2009, 17:06
quelle

4 Antworten

11

Verwenden Sie die Tabelle umbenennen

%Vor%

Es ist atomar, funktioniert auf allen Speicher-Engines und muss die Indizes nicht neu erstellen.

    
Todd Gardner 01.06.2009, 17:14
quelle
2

In MySQL, wegen des Verhaltens von TRUNCATE denke ich, dass du es brauchst zu:

%Vor%

Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, die DDL-Transaktion sicher zu machen.

    
Cade Roux 01.06.2009 17:12
quelle
2

Sie können Transaktionen verwenden (für InnoDB ),

%Vor%

oder LOCK TABLES (für MyISAM ):

%Vor%     
Quassnoi 01.06.2009 17:13
quelle
0

Ich weiß nicht, dass Hot-MySQL Transaktionen behandelt, aber in T-SQL könnte man

schreiben %Vor%

Auf diese Weise wäre Ihre Operation "atomar", aber nicht sofort.

    
Paulo Santos 01.06.2009 17:12
quelle

Tags und Links