it-swarm-eu.dev

Jak vyměním tabulky v MySQL?

Předpokládejme, že mám tabulku foo, která obsahuje některé statistiky, které se tu a tam vypočítávají. Je velmi používán jinými dotazy.

Proto chci vypočítat novější statistiky v foo_new a vyměňte je, když je výpočet připraven.

Mohl bych udělat

ALTER TABLE foo RENAME foo_tmp;
ALTER TABLE foo_new RENAME foo;

ale co se stane, když dotaz potřebuje tabulku foo mezi těmito dvěma řádky, když neexistuje tabulka foo? Myslím, že to musím nějak uzamknout ... nebo existuje jiný způsob, jak to udělat?

53
Ben

Použijte tento jediný příkaz:

RENAME TABLE foo TO foo_old, foo_new To foo;

Jedná se o atomovou operaci: obě tabulky jsou uzamčeny společně (a na velmi krátkou dobu), takže k jakémukoli přístupu dochází buď před, nebo po RENAME.

87
Shlomi Noach