2016-05-13 6 views
1

Ich habe eine Datenbank mit häufig ändernden Rohdaten. Es gibt einen ziemlich komplexen Prozess, der eine Zusammenfassungstabelle dieser Daten erstellt.Abschneiden gefolgt von Einfügen in einer Transaktion MySQL

Ich habe eine Stored Procedure erstellt, um diese Tabelle zu erstellen, die eine Abfolge von drei Tabellen verwendet. Da ich noch nicht verfolgen, welche Daten aktualisiert wurde (ich arbeite, dass) ich einfach diese Abfragen mit einer Folge von füllen:

TRUNCATE tablename ... 
INSERT INTO tablename ... 

Ich habe alle diese drei Abfragen in einer einzigen Transaktion bewegt:

START TRANSACTION READ WRITE; 

    [Sequence of TRUNCATE/INSERT queries] 

COMMIT; 

ich erwartet, dass die begehen, nachdem ich sofort die resultierende Tabelle sehen würde, aber es scheint eine 2-3 Sekunden-Periode zu sein, wo die Tabelle leer ist. Gibt es einen einfachen Weg, um das zu beheben?

+0

In welchem ​​Kontext sehen Sie diese Verzögerung? –

Antwort

2

NEIN !! können Sie TRUNCATE in einer Transaktion nicht verwenden. Trunkieren löscht das Loch Table File und erstellt es neu. Kürzen Operationen verursachen ein implizites Commit.

eine Idee:

kann es sein, die Arbeit mit RENAME. Umbenennen ist eine einzelne Transaktion

CREATE TABLE table_copy like your_table; 
INSERT DATA in table_copy; 
RENAME your_table TO your_table_old, table_copy TO your_table; 
DROP table_copy; 
+0

@Hans - ich habe ein paar Sachen hinzugefügt –

+0

Ah okay, keinen Punkt ich lesen und erneut über Transaktionen lesen, wenn das Problem mit den darin verwendeten Befehlen sitzt. Danke das hat es gelöst. – Hans

+0

Eigentlich wäre es dann nicht besser, nur alle Zeilen zu löschen? – Hans