#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: Что вы подразумеваете под «широким масштабом»?