2013-04-01 1 views
3

У нас есть ситуация, когда у нас есть таблица A и B, где A имеет несколько тысяч строк (около 50k) и B имеет несколько миллионов строк (приблизительно 5M). Таблица B содержит столбец, который указывает на первичный ключ таблицы A. Нам нужно добавить столбец в таблицу A, и они обеспокоены тем, что в то время, когда выполняется команда alter, возможно, она имеет блокировку чтения в таблице B.Mysql Изменение времени таблицы в зависимости от наличия внешних ключей

Мой первый вопрос: правда ли, что таблица B будет заблокирована при изменении таблица A? И если да, было бы лучше сначала отбросить внешний ключ от B до A, а затем запустить инструкции alter и впоследствии воссоздать внешний ключ.

Мы используем MySQL 5.5, InnoDB и отдельные файлы для каждой таблицы.

+0

Лично я бы рекомендовал удалить ограничение внешнего ключа, когда размер стола большой. Это замедлит процесс. И, во-вторых, во время таблицы изменений копия таблицы делается внутри, и если успешно, старая таблица заменяется новой. Так что чтение-замок имеет смысл для меня. – georgecj11

ответ

0

Вы попробовали?

set foreign_key_checks = 0; 
ALTER TABLE ...; 
set foreign_key_checks = 1; 

Вы можете удалить внешний ключ, если его можно безопасно удалить навсегда. Но временно удалите ограничение внешнего ключа, а затем добавьте его снова после того, как оператор ALTER будет накладным.

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

  • Нет связанных вопросов^_^