Как поменять местами таблицы в MySQL?

Предположим, у меня есть таблица foo , которая содержит статистические данные, которые вычисляются время от времени. Он широко используется другими запросами.

Вот почему я хочу вычислить более поздние статистические данные в foo_new и поменять их, когда вычисление будет готово.

Я мог бы сделать

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

, но что произойдет, если запрос нуждается в таблице foo между этими двумя строками, когда нет таблицы foo ? Думаю, мне нужно как-то заблокировать его ... или есть ли другой способ сделать это?

41 голос | спросил Ben 7 PM00000040000002831 2012, 16:39:28

1 ответ


64

Используйте эту команду:

  RENAME TABLE foo TO foo_old, foo_new To foo;
 

Это атомная операция: обе таблицы блокируются вместе (и в течение очень короткого времени), поэтому любой доступ происходит либо до, либо после RENAME .

ответил Shlomi Noach 7 PM00000040000002831 2012, 16:49:28

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132