Un nouveau projet m'a forcé à verrouiller une table pendant le traitement des mises à jour. J'ai suivi chaque suggestion et guide que je peux trouver, y compris How to lock mysql tables in php et http://dev.mysql.com/doc/refman/5.1/en/innodb-locking-reads.html, mais j'ai toujours la même erreur: # 1064 - Vous avez une erreur dans votre syntaxe SQL; vérifier le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'LIMIT 0, 30' à la ligne 1MySql "For Update" entraîne l'erreur
Afin de surmonter tous les démons possibles dans ma table en direct, j'ai créé une nouvelle table sur le moteur InnoDB pour les tests, a ajouté l'index unique, inséré quelques lignes, et utilisé la syntaxe suivante pour interroger:
SELECT svalue FROM `test` WHERE skey='key2' for update;
qui produit la même erreur. Suppression du pour la mise à jour; de la requête permet à la requête de s'exécuter sans erreur.
Je ne suis pas sûr de ce que je fais mal, et j'ai essayé tout ce que je peux penser. S'il vous plaît, aidez-moi à comprendre ce qui me manque!
Merci
Mon but est de sélectionner une valeur existante de la table, puis incrémenter et mettre à jour tout en s'assurant qu'un autre processus ne lit pas l'ancienne valeur avant la fin de la mise à jour. La plupart de mes recherches ont indiqué «Pour la mise à jour» pour ce scénario, y a-t-il un avantage à utiliser des transactions à la place? – Jimmyb
@ foxns7: op est effectivement correct pour verrouiller la ligne. Une transaction concurrente pourrait le modifier. –