2012-02-10 4 views
2

Quelqu'un peut-il m'aider (en fournissant une requête SQL) comment puis-je verrouiller une table de base de données ainsi personne ne peut lire, écrire ou mettre à jour (Si possible!)?MySQL - Verrouiller Table Numéro

+1

pourquoi voulez-vous faire cela? –

+4

http://dev.mysql.com/doc/refman/5.0/fr/lock-tables.html –

+0

@MitchWheat, je veux cela parce que dans mon application, je veux un utilisateur face à des problèmes avec la lecture sale et l'écriture sale. J'essaie de résoudre par le mode partagé et le verrouillage de mode exclusif, mais il crée des problèmes de blocage. – Arpssss

Répondre

1

rapide et sale: quand vous le voulez verrouillé - Renommez la table:

RENAME TABLE old_table TO backup_table 

et une fois que vous avez terminé - le renommer:

RENAME TABLE backup_table TO old_table 

bien sûr que vous aurez avoir à attraper des erreurs sur votre application et gérer "Table 'tbl_name' n'existe pas" en tant que "accès refusé".

+0

Vous ne dites rien sur ce qu'il faut faire si la table est accédée * au moment du changement de nom, ce qui veut dire que vous ne pourriez pas le renommer. alors, vous? –

+0

un "select" ne nuira pas - la seule condition de course possible est si deux threads essayent de le renommer simultanément - mais vous pouvez le manipuler facilement en synchronisant la méthode qui renomme la table – alfasin

+1

Droite, mais je était en train de parler d'accès en écriture, comme avec un UPDATE, INSERT ou DELETE L'OP veut bloquer tout type d'accès, y compris l'accès en écriture, ce qui signifie qu'il (accès en écriture) i s possible, ce qui signifie que quelqu'un pourrait être en train d'écrire juste au moment de la publication de la déclaration RENAME. –