SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.05.2011 10:44:01

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Безопасное переименование таблиц в mysql

Здравствуйте..
Есть таблица, `tb`, во время обновления базы создаётся `temp_tb`. В конце обновления я удаляю `tb` и переменовую `temp_tb` т.е

DROP TABLE IF EXISTS `tb`;
ALTER TABLE `temp_tb` RENAME TO `tb`;


И как раз в эти самые мгновения кто то запрашивает страницу, в логах сайта
Table 'tb' doesn't exist.

Можно ли как то усовершенствовать обновление?

Неактивен

 

#2 16.05.2011 11:27:53

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Безопасное переименование таблиц в mysql

Теоретически так.

LOCK TABLE tb READ;
ALTER TABLE `tb` RENAME `delete_tb`;
ALTER TABLE `temp_tb` RENAME `tb`;
UNLOCK TABLES;
DROP TABLE IF EXISTS `delete_tb`;

Неактивен

 

#3 16.05.2011 13:11:26

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Безопасное переименование таблиц в mysql

Можно так


RENAME TABLE tb TO delete_tb,
             temp_tb TO tb;
DROP TABLE IF EXISTS `delete_tb`;
 

Неактивен

 

#4 16.05.2011 15:40:08

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Безопасное переименование таблиц в mysql

avgsoft написал:

Можно так


RENAME TABLE tb TO delete_tb,
             temp_tb TO tb;
DROP TABLE IF EXISTS `delete_tb`;
 

Интересно ...
Вы думайте другие обращения к этой таблице будут стоять в очереди ? То есть таблицы будут залочены на время переименования всех таблиц ?

Неактивен

 

#5 16.05.2011 16:24:44

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Безопасное переименование таблиц в mysql

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

Неактивен

 

#6 16.05.2011 19:02:31

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Безопасное переименование таблиц в mysql

Спасибо))

RENAME TABLE tb TO delete_tb, temp_tb TO tb,
 tb1 TO delete_tb1, temp_tb1 TO tb1;

в моём случае может быть что одной из таблиц не существует, следовательно запрос не выполнится, можно ли усовершенствовать, чтобы всё одним запросом?

Отредактированно Марк (16.05.2011 19:04:27)

Неактивен

 

#7 17.05.2011 11:03:32

avgsoft
Завсегдатай
Зарегистрирован: 23.09.2010
Сообщений: 36

Re: Безопасное переименование таблиц в mysql

Думаю что нет. Если к моменту исполнения соответствующей инструкции в RENAME TABLE (пример инструкции: table_name TO new_table_name), таблицы с указанным именем не существует, получите ошибку исполнения. Да и есть ли смысл переименовывать то чего нет... )

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson