2011-01-03 3 views
1

Dans mon php PageTable Mysql question de verrouillage

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

Mon problème est que, après la table de verrouillage invoice_numbers. Je ne peux pas accéder à link_master tableau, mais après avoir déverrouillé je peux accéder link_master Table

Pourquoi est-il? Comment puis-je accéder à link_master après le verrouillage invoice_numbers table?

EDIT:

Je veux verrouiller seulement invoice_numbers à table unique. Pendant la période de verrouillage, je veux utiliser toutes les autres tables de la base de données. Y a-t-il un moyen de le faire?

+0

désolé mais pourquoi vous verrouillez la table? Je pense que MySQL verrouillera la table automatiquement. –

Répondre

2

de mysql reference manual:

Une session qui nécessite des verrous doivent acquérir toutes les serrures dont il a besoin dans une seule instruction LOCK TABLES. Par exemple, dans la séquence suivante des états, une erreur se produit pour la tentative d'accès t2 car il n'a pas été verrouillé dans l'instruction 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

tout en n'étant pas si intuitif, le verrouillage se verrouille également hors de ces tables que vous n'avez pas inclus. donc dans votre verrou d'origine, vous devez verrouiller toutes les tables que vous utiliserez pendant la période de verrouillage – davin

1

Vous rencontrez très probablement dans une impasse. Vérifiez votre code pour quelque chose comme:

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

Il est possible que vous avez verrouillé une table dans une instruction et l'autre dans une autre déclaration qui sont à la fois en cours d'exécution en même temps. Juste une supposition cependant.

Regarde mes questions de verrouillage de table à: http://devoluk.com/mysql-myisam-table-lock-issue.html