2010-12-20 3 views
0

J'ai récemment lancé un projet web assez volumineux qui va utiliser MySQL comme base de données. Je ne suis pas complètement familier avec MySQL, mais j'en connais assez pour faire des requêtes simples et généralement faire tout ce dont j'ai besoin.Verrouillage dans MySQL

On m'a dit que j'avais besoin de verrouiller mes tables avant de leur écrire? Est-ce nécessaire à chaque fois? Sûrement MySQL aurait une sorte de fonctionnalité intégrée pour gérer la lecture simultanée et l'écriture de la base de données? En bref, quand devrais-je utiliser le verrouillage, et comment dois-je procéder?

+2

Pourquoi n » t vous juste expliquer vos problèmes? "On m'a dit que j'avais besoin de verrouiller mes tables avant de leur écrire" --- sans aucune question particulière cette phrase est incorrecte. – zerkms

+0

Les verrous sont automatiques en utilisant sql standard. Si votre table doit être verrouillée, MySQL le fera pour vous. –

+0

@zerkms Un de mes collègues m'a juste dit de m'assurer que j'avais fermé mes tables avant de leur écrire. Je ne savais pas exactement pourquoi ou si c'était nécessaire, c'est pourquoi je demande. – DanielGibbs

Répondre

3

Voici une excellente explication de quand et comment mettre en œuvre le verrouillage: http://www.brainbell.com/tutors/php/php_mysql/When_and_how_to_lock_tables.html

Selon la suggestion de El Yobo:

Si vous faites un arrêt sélectionnez querys, il ne va pas être un problème. de l'article:

Le verrouillage est nécessaire que lorsque développement des scripts qui lisent d'abord une valeur d'une base de données et plus tard écrire cette valeur à la base de données.

+0

Bon lien, mais je pense que vous devriez aussi le résumer en disant "vous n'avez probablement pas besoin de vous en préoccuper" :) –

+0

Merci, c'est ce que je cherchais. Je n'ai donc besoin de verrouiller explicitement les tables que lorsque je fais une transaction, pas pour des requêtes uniques? – DanielGibbs

+0

@DanieL: si vous avez besoin d'une transaction, effectuez une transaction. Il n'y a rien à faire avec des serrures alors. – zerkms

2

En bref, n'utilisez pas myisam plutôt que innodb. Lorsque vous souhaitez insérer, mettre à jour ou supprimer des lignes (CRUD) font:

start transaction; 

insert into users (username) values ('f00'); 
... 

commit; -- or rollback 

quand vous voulez récupérer les lignes simplement les sélectionner:

select user_id, username from users; 

espérons que cette aide :)

+0

+1 InnoDB. En tant qu'utilisateur de Postgres depuis longtemps, l'existence de moteurs qui ne supportent pas les fonctions de base d'une base de données (par exemple, MyISAM ne supportant pas les transactions, les clés étrangères et les contraintes de vérification) a été un choc. –

+0

Vous devez également indiquer que les transactions ne sont requises que si vous voulez faire * plus * qu'une déclaration et que vous devez vous assurer qu'elles échouent toutes ou qu'elles réussissent, ou que les données sont cohérentes pendant la durée de la transaction. . –

Questions connexes