2010-11-13 4 views
1

Je souhaite mettre à jour un seul champ dans une table mysql.Ce code SQL sera-t-il mis à jour correctement?

J'ai un "ad_id" qui est unique.

Le champ "mod_date" est un champ TIMESTAMPS, qui est celui que j'ai besoin de mettre à jour.

UPDATE main_table 
SET main_table.mod_date = NOW() 
WHERE classified.ad_id = $ad_id"; 

Je n'ai pas testé encore parce que je crains qu'il pourrait mettre à jour toutes les lignes.

J'ai donc deux questions:

est là de toute façon pour empêcher MySql de mettre à jour plus de 1 rang?

Ce code SQL est-il correct pour la mise à jour d'une ligne seulement?

Merci

+1

Je pense que la requête va échouer parce que vous essayez de mettre à jour main_table mais la clause where fait référence à la table appelée classifiée .. – emurano

+0

Elle échouera également parce que vous avez un double guillemet. – vol7ron

Répondre

2

Si ad_id est unique, il ne met à jour une ligne (si ad_id $ est valide, et zéro autrement).

Si vous êtes préoccupé par une mise à jour de ce type, réécrivez-la en tant que sélection pour confirmer les lignes sur lesquelles elle fonctionnera avant de l'exécuter.

2

Votre requête ne semble pas fonctionner en tant que telle car elle recherche le champ ad_id dans la table classified qui n'a pas été défini dans l'instruction. Si ce n'est qu'une requête partielle et que vous joignez la table quelque part dans la requête, il n'y a pas assez d'informations ici pour dire combien de lignes seront modifiées.

Vous pouvez ajouter LIMIT 1 à la fin de la requête pour la mettre à jour uniquement sur la première ligne trouvée par la requête, mais si vous n'êtes pas sûr de la requête, la première ligne n'est peut-être pas celle que vous souhaitez modifier.

En guise de remarque, je dois dire que si vous avez peur d'essayer de voir ce que fait la requête, cela signifie que vous n'avez pas de sauvegarde de la base de données ou que vous travaillez directement avec un base de données de production, et ces deux options semblent assez effrayantes.

0

Quelle est la relation entre main_table et classified?

Par exemple ...

UPDATE header h 
    INNER JOIN detail d ON d.id_header = h.id_header 
SET h.name = 'New name' 
WHERE d.id_detail = 10 

mettra à jour name dans le tableau header pour id_detail spécifique.

Dans votre cas si ad_id est unique, vous pouvez être sûr que MySQL ne mettra à jour qu'une seule ligne.