MySQL: Est-il un moyen de mettre à jour une table entière en une seule requête?
J'ai besoin de mettre à jour tous les enregistrements d'une table(il ne devrait pas être de plus de 100 enregistrements). Chaque enregistrement aurez besoin d'avoir un champ mis à jour avec une valeur différente.
Je vais devoir faire une requête pour chaque mise à jour ou est-il un autre moyen? Je n'arrive pas à trouver comment le faire à la fois
Merci pour l'aide!
EDIT: De préciser, chaque champ que je suis à jour contiendra une valeur unique qui est déterminé sur le côté client. Donc pas d'autres tables sont impliqués.
Pourriez avoir besoin de plus d'informations sur celui-ci. Êtes-vous à incrémenter le champ, comme le changement de 3 à 4? Sont toutes les lignes de bénéficier de la "nouvelle" valeur? Avez-vous un jeu de données qui comprend les nouvelles valeurs et les clés primaires correspondantes (ou autre)?
OriginalL'auteur user239237 | 2010-01-04
Vous devez vous connecter pour publier un commentaire.
La réponse dépend beaucoup de la source de nouvelles valeurs.
Si vous avez une courte liste de valeurs nouvelles, vous pouvez être en mesure d'utiliser
CASE
:Ce n'est pas pratique si la liste des nouvelles valeurs est très longue.
Si vous avez besoin de mettre à jour vos lignes avec des valeurs qui existent dans la corrélation des lignes d'une autre table, vous pouvez utiliser MySQL multi-tables de mise à JOUR de la syntaxe:
Vous pouvez aussi faire quelque chose de similaire avec une sous-requête corrélée.
Il y A longtemps lorsque j'ai utilisé MySQL 3.23 (avant il pris en charge multi-tables de mise à jour ou de sous-requêtes), je voudrais exécuter un
SELECT
dont la sortie a été entièrement formé de mise à JOUR des déclarations. Il a été difficile d'obtenir toutes les citations de la droite, mais le résultat a été un script SQL de centaines d'instructions UPDATE, chaque modification de valeurs dans une ligne. Pas très efficace, mais si elle ne doit être fait rare, il était bien.Désolé, j'ai oublié syntaxe de MySQL pour la fin de l'affaire expression est simplement
END
alors que dans d'autres SGBDR ils préfèrentEND CASE
. J'ai édité l'exemple ci-dessus.OriginalL'auteur Bill Karwin
Si la nouvelle valeur de chaque ligne peut être déduite à partir de la valeur actuelle de la ligne, vous pouvez le faire en un seul
UPDATE
requête. Sinon, pas de.Est une façon de stocker l'a souvent changé de colonnes dans une table séparée,
DELETE
ouTRUNCATE
de la table, etINSERT
toutes les nouvelles valeurs dans une requête (à l'aide d'un insert de plusieurs lignes de la requête).Dans MySQL, vous avez accès à
on DUPLICATE KEY UPDATE
pour améliorer la première méthode.OriginalL'auteur Victor Nicollet
Si chaque valeur est dérivée à partir d'autres valeurs dans la ligne et peut être calculée dans une expression simple, vous pouvez faire quelque chose comme ceci:
Mais si les nouvelles valeurs sont calculées à l'extérieur de la base de données (par exemple, par un script), vous ne pourrez probablement pas faire mieux que de séparer les requêtes de mise à jour pour chaque ligne.
OriginalL'auteur Alex Reisner
Si chaque champ va avoir besoin d'une valeur différente, no.
Vous pouvez avoir les valeurs dans un tableau, et peut écrire une boucle qui ne, de sorte que vous n'avez pas besoin d'écrire chaque mise à JOUR à la main.
Vous pourriez même créer l' $myIds et $myField tableaux par l'intermédiaire de certains états, en fonction de vos besoins, ce qui serait assez indolore.
Si c'est la saisie de l'utilisateur, assurez-vous de désinfecter ces variables.
OriginalL'auteur munch
Sans rien connaître de la valeur à attribuer à chaque ligne, la réponse est "probablement pas". Une autre affiche de mentionner que vous pouvez affecter toutes les lignes à la fois en laissant la clause where, mais cela ne vous aidera pas si chaque ligne a besoin de sa propre valeur.
Si vous pouvez fournir certaines informations sur la façon dont vous savez quelle valeur donner à chaque ligne, il peut être une meilleure réponse. En attente de plus d'infos...
OriginalL'auteur Eric J.
Si la valeur de la mise à jour diffère d'un enregistrement à l'autre, vous devez créer une nouvelle instruction de mise à JOUR à chaque fois.
oh ne pensais pas que
OriginalL'auteur antpaw