2012-03-28 3 views
0

Я использую Engine InnoDB на моем сервере MySQL.Как временно заблокировать базу данных в mysql

У меня есть патч-скрипт для обновления моих таблиц, таких как добавление новых столбцов и заполнение данных по умолчанию.

Я хочу убедиться, что нет другой сессии, использующей базу данных. Поэтому мне нужен способ блокировки базы данных:

  1. Блокировка не должна выходить из существующей сессии. Если их какой-либо другой существующий сеанс просто завершит ошибку блокировки и отчета
  2. Блокировка должна предотвратить другие сеансы для чтения/записи/изменения базы данных.

Спасибо большое всем!

+0

Если вы беспокоитесь о проблемах согласованности/параллелизма, MySQL автоматически заблокирует таблицы, чтобы предотвратить это. Не могли бы вы объяснить, что вы пытаетесь выполнить? Почему вы хотите заблокировать таблицы? – kba

+0

Спасибо. Просто согласованность данных. Я не хочу, чтобы что-то еще доступ к базе данных, когда я добавляю столбцы. – Frank

+0

База данных будет оставаться постоянной, без необходимости ручной блокировки. – kba

ответ

1

Вам не нужно беспокоиться о блокировке столов самостоятельно. В документации MySQL (http://dev.mysql.com/doc/refman/5.1/en/alter-table.html) говорит:

В большинстве случаев, ALTER TABLE создает временную копию оригинала таблица. MySQL ожидает выполнения других операций, которые изменяют таблицу, затем продолжается . Он включает изменение в копию, удаляет исходную таблицу и переименовывает новую. В то время как ALTER TABLE исполняется , исходная таблица может быть прочитана другими сеансами. Обновления и записи в таблицу, которые начинаются после начала операции ALTER TABLE , останавливаются до тех пор, пока новая таблица не будет готова, а затем автоматически перенаправляется в новую таблицу без каких-либо неудачных обновлений.

Смежные вопросы