2011-01-03 4 views
1

В моей странице PHPMysql таблицы блокировки вопрос

LOCK TABLE invoice_numbers WRITE 
/*some stuff */ 
SELECT * FROM link_master 
/*some stuff */ 
UNLOCK TABLES 

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

Почему это так? Как я могу получить доступ к link_master после блокировки invoice_numbers стол?

EDIT:

Я хочу, чтобы зафиксировать только отдельные invoice_numbers таблицы. Во время периода блокировки я хочу использовать все остальные таблицы из базы данных. Есть ли способ сделать это?

+0

извините, но почему вы заблокировать таблицу? Я думаю, что MySQL автоматически заблокирует таблицу. –

ответ

2

из mysql reference manual:

Сеанс, которая требует блокировки должны приобрести все замки, что он нуждается в одном операторе 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 

+0

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

1

Вы, скорее всего, имея в тупик. Проверьте ваш код для чего-нибудь вроде:

LOCK TABLE link_master WRITE 
/*some stuff */ 
SELECT * FROM invoice_numbers 
/*some stuff */ 
UNLOCK TABLES 

Вполне возможно, что вы заперли одну таблицу в одном операторе, а другой в другом заявлении, что оба работает одновременно. Впрочем, догадка.

Проверьте мои проблемы блокировки таблицы на: http://devoluk.com/mysql-myisam-table-lock-issue.html

Смежные вопросы