ЗАБЛОКИРОВАТЬ таблицу для ЧТЕНИЯ MYSQL

#php #mysql

#php #mysql

Вопрос:

Я хочу заблокировать определенную таблицу для чтения, но когда я запросил

    mysql_query("LOCK TABLES unique_voucher READ");
  

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

Возможно ли заблокировать ТОЛЬКО эту конкретную таблицу и не разрешить пользователям запрашивать эту таблицу до завершения какого-либо процесса?

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

Комментарии:

1. Вы когда-нибудь узнавали, как это сделать?

Ответ №1:

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

Из http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html :

«Сеанс, требующий блокировок, должен получить все блокировки, которые ему нужны, в одном операторе LOCK TABLES. Пока полученные таким образом блокировки сохраняются, сеанс может получить доступ только к заблокированным таблицам. Например, в следующей последовательности инструкций возникает ошибка при попытке доступа к t2, поскольку он не был заблокирован в инструкции LOCK TABLES:»

 mysql> LOCK TABLES t1 READ;
mysql> SELECT COUNT(*) FROM t1;
 ---------- 
| COUNT(*) |
 ---------- 
|        3 |
 ---------- 
mysql> SELECT COUNT(*) FROM t2;
ERROR 1100 (HY000): Table 't2' was not locked with LOCK TABLES
  

Комментарии:

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

2. @MRR: Что вы подразумеваете под «широким масштабом»?