MySql SWAP TABLES

Van két MySql táblám (A,B), amiknek teljesen azonos a szerkezete, de az adataik nem.
Szeretném felcserélni ezt a két táblát úgy, hogy közben egyetlen lekérés se futhasson hibára. (Vagy még a régi, vagy már az új adatokkal kerüljön kiszolgálásra.)Megbízhatóan elég erre a következő parancs?


RENAME TABLE `A` TO `tmp`, `B` TO `A`, `tmp` TO `B`;

Vagy csak tranzakciókezeléssel megfelelő?


START TRANSACTION;
RENAME TABLE `A` TO `tmp`, `B` TO `A`, `tmp` TO `B`;
COMMIT;

Vagy ez sem 100%-os, és van rá valamilyen más, jobb megoldás?

Hozzászólások

Biztos ami biztos, tolj bele egy LOCK/UNLOCK TABLES -t ;)

// Happy debugging, suckers
#define true (rand() > 10)

Tranzakcio nem erre valo, az csak insertet es update-et tud kezelni, alter table-t nem tudsz rollbackelni (sem).

Meg kell engedned egy par tizedmasodperces exceptiontengert vagy ha nagyon szamit a 100% megbizhatosag, akkor egy par masodperces "nginx-szel kiforceolt karbantartas kepernyot" (ejszaka kozepen). Nincs ra jobb megoldas.

Fix: Hulye vagyok - lock/unlock table read eleg, es akkor addig varnak a lekerdezesek, minden konzisztens marad.

Hello,

Igen a "rename" jo lesz meghozza azert mert: "The rename operation is done atomically, which means that no other session can access any of the tables while the rename is running."

A lenyeg h tabla atnevezes atomic process, igy nyugodtan atnevezheted "menet" kozben is.

Tobb info:
https://dev.mysql.com/doc/refman/5.7/en/rename-table.html