2012-07-19 3 views
0

Dois-je verrouiller explicitement table mysql pour le cas suivant:MySQL Table de verrouillage

base de données mysql nom d'utilisateur: db_user (et est seul)
sessions client Web: beaucoup d'utilisateurs connectés simultanément

Comme l'utilisateur mysql est seul, mais j'ai beaucoup de sessions client avec mon serveur web. ce qui se passera (INSERT enregistrement d'une table THEN GET ID INSERT ET ajouter des données à une autre table):

  1. de nombreuses sessions Web ont une copie séparée de db_user.
  2. une seule copie de db_user pour de nombreuses sessions de navigateur.
  3. tout autre.

Aidez-nous s'il vous plaît.

+1

Désolé, je ne peux pas comprendre exactement ce que vous demandez. Si vous ne faites que sélectionner des données, alors non, vous n'avez jamais besoin de VERROUILLER les tables. –

+0

lors de l'insertion et de l'ajout ultérieur de données à d'autres tables en utilisant le dernier ID d'insertion de la première table. –

+0

Quels sont les objectifs de la table de verrouillage? Voulez-vous autoriser les insertions uniquement pour un utilisateur pour obtenir la clé primaire? Si c'est vrai, vous pouvez utiliser le moteur InnoDB et la fonction 'last_insert_id()'. Cette fonction est une fonction basée sur une session, donc elle aura toujours une valeur unique (dans les différentes sessions). InnoDb moteur vous permettra d'utiliser le verrouillage de niveau de ligne instable de verrouillage de la table de sorte que les autres connexions fonctionneront aussi – ravnur

Répondre

4

Harmeet,

La réponse courte est non, vous n'avez pas besoin d'utiliser LOCK TABLES lorsque vous faites ce que vous décrivez.

Vous ne devez utiliser LOCK TABLES que si vous voulez être sûr que vous êtes le seul à écrire sur une table, par exemple, si vous voulez INSERT un grand nombre d'enregistrements, et souhaitez que l'opération se déroule aussi rapidement que possible.

Vous pouvez le voir dans les fichiers de vidage créés par la commande mysqldump. Voici un exemple d'un fichier de vidage:

LOCK TABLES `tbl` WRITE; 
/*!40000 ALTER TABLE `tbl` DISABLE KEYS */; 
INSERT INTO `tbl` VALUES ... 
/*!40000 ALTER TABLE `tbl` ENABLE KEYS */; 
UNLOCK TABLES; 
+0

verrouiller serait bénéfique pour une seule (mais énorme) REPLACE déclaration? – andig