SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 15.06.2008 16:46:55

FromQuestion
Участник
Зарегистрирован: 15.06.2008
Сообщений: 2

Блокировать таблицы?

PHP+MySQL

Есть система статистики организованная следующем образом.

Когда приходит пользователь, то он записывается в таблицу статистики сегодняшного дня.
Когда день заканчивается, то из этой самой таблицы все удаляется и подсчитывается.

Но вот проблема:
когда приходит пользователь, то изначально проверяется, соответствуют ли даты в таблице сегодняшней и если не соответствуют, то начинается удаление всего из таблицы и так дале...

Вопрос: возможна ли такая ситуация, что два пользователя прийдут одновременно и одновременно начнется обновление данных? Если да, то как этого избежать?

Работу с кроном не предлагать.

Неактивен

 

#2 15.06.2008 20:15:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Блокировать таблицы?

Например, Вы можете сделать таблицу Innodb и все операции выполнять внутри транзакции. В этом случае для удаления следует использовать DELETE, а не TRUNCATE. Для MyISAM можете использовать LOCK TABLES

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

Неактивен

 

#3 15.06.2008 20:44:09

FromQuestion
Участник
Зарегистрирован: 15.06.2008
Сообщений: 2

Re: Блокировать таблицы?

Спасибо за ссылку, осталось только перевести что там написано sad

Неактивен

 

#4 16.06.2008 00:26:42

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Блокировать таблицы?

Возьмите русскую документацию http://downloads.mysql.com/docs/refman- … hapter.zip  (она правда для 4.0, но LOCK TABLES в ней описано)

Неактивен

 

Board footer

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