Maison >base de données >tutoriel mysql >Exemple d'analyse de MySQL implémentant une requête et une mise à jour simultanées de la même table
Cet article présente principalement la méthode d'interrogation et de mise à jour simultanées de la même table dans la base de données MySQL. Les amis qui en ont besoin peuvent s'y référer
Dans les projets ordinaires, nous rencontrons souvent de tels problèmes : j'ai besoin des données. est mis à jour et interrogé simultanément dans Zhang Biao. Par exemple : il existe une table de données comme indiqué ci-dessous. L'opération de mise à jour doit maintenant être : mettre à jour la valeur de nom de status=1 avec la valeur de nom de id=2
Habituellement, l'instruction suivante nous vient à l'esprit pour répondre à cette exigence :UPDATE tb_testSET NAME = ( SELECT NAME FROM tb_test WHERE id= 2)WHERE `status` = 1mais une erreur est signalée. Le message d'erreur est :
Vous ne pouvez pas mettre à jour ou sélectionner la même table dans la même instruction. . Vous ne pouvez pas opérer sur la même table. Si vous y réfléchissez différemment, cela devrait être possible si ce n'est pas la même table. Par conséquent, le résultat de la sélection peut être considéré comme une table intermédiaire temporaire, et les données liées à la mise à jour souhaitées peuvent être obtenues à partir de la table intermédiaire. Par conséquent, la déclaration de mise à jour ci-dessus peut être modifiée comme suit : You can't specify target table 'tb_test' for update in FROM clause
UPDATE tb_testSET NAME = (select name from ( SELECT NAME FROM tb_test WHERE id = 2) as t)WHERE `status` = 1De cette façon, l'opération dans la question peut être terminée. Le processus général est le suivant : interroger les données avec id=2 comme table intermédiaire t ; interroger les données définies à partir de la table t ; effectuer l'opération de mise à jour afin de ne pas mettre à jour et sélectionner la même table dans la même instruction, car c'est le cas. assez similaire à Deux tables sont exploitées, tb_test et la table intermédiaire t. Le résultat final est le suivant :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!