SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 16.11.2009 15:51:32

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Как сделать запрет на чтение данных из таблицы

Как можно сделать так, чтобы на время запретить чтение какой-то таблицы.
    Допустим к таблице 'table1' делается запрос 'select d1 from table1'. Затем
значение из 'd1' увеличивается на 1 и снова заносится в ту же таблицу 'table1' в тоже поле 'd1'. Необходимо, чтобы за время, когда скрипт получает значение и заносит в таблицу новое, не вклинился другой процесс. Иначе получится, что два раза из 'd1' будет извлечено одно и тоже значение и, соответственно, в таблице величина 'd1' изменится на 1, а нужно чтобы на 2.
    Запрет записи здесь не решает проблемы, необходимо запретить именно чтение даных из таблицы. Как такое можно реализовать из php скрипта?

Отредактированно sito-corito (16.11.2009 15:53:51)

Неактивен

 

#2 16.11.2009 18:23:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как сделать запрет на чтение данных из таблицы

SELECT GET_LOCK('blabla', 10);

Неактивен

 

#3 17.11.2009 17:43:42

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: Как сделать запрет на чтение данных из таблицы

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

Неактивен

 

#4 17.11.2009 17:53:35

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: Как сделать запрет на чтение данных из таблицы

Объясню подробнее.
Есть несколько таблиц с товарами. Каждая таблица содержит определённую категорию товаров. Для каждого товара устанавливается уникальный номер в пределах всех таблиц (чтобы номер товара не повторялся ни в одной таблице). Для этого я делаю специальную таблицу, в которой храню номер последнего добавленного товара. Процессы последовательно обращаются к этой таблице и всегда должны получать уникальный номер (дождавшись окончания другого процесса)

Неактивен

 

#5 17.11.2009 18:24:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как сделать запрет на чтение данных из таблицы

Вы пытаетесь сериализовать процессы. Есть специальный метод для сериализации
процессов, я его написал.

Более правильно, чем использовать его, — только использовать mutex внутри
приложения.

Если совсем не можете жить без своей идеологии — блокируйте таблицы, с которыми
будете общаться, на запись (LOCK TABLE tablename WRITE). Но это неправильный
подход.

Неактивен

 

Board footer

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