Changer les données d'une cellule dans mysql


156

Comment puis-je changer les données dans une seule cellule d'une table mysql. J'ai un problème avec UPDATE car cela modifie tous les paramètres d'une colonne, mais je n'en veux qu'un seul. Comment?


Qu'est-ce que tu as essayé jusque-là? Pouvez-vous partager la requête que vous utilisez? Habituellement, vous ne mettez pas à jour "tous les paramètres d'une colonne"
Nico Haase

Réponses:


191

Vous devrez probablement spécifier les lignes que vous souhaitez mettre à jour ...

UPDATE 
    mytable
SET 
    column1 = value1,
    column2 = value2
WHERE 
    key_value = some_value;

1
J'étais confus par cette réponse, pensant que SET avait sélectionné les lignes à changer et où les avait changées.
Keith

la condition dans WHERE peut-elle être column1 = old_value?
weefwefwqg3

@ weefwefwqg3, oui, c'est possible, mais ça ne sert à rien. Si vous ne modifiez pas la valeur, laissez-la simplement en dehors de la partie SET.
Brian Hooper

1
@Brian Hooper: J'ai besoin de changer la valeur, je veux dire si je peux le faire: UPDATE mytable SET column1 = new_value WHERE column1 = old_value;??
weefwefwqg3

2
@ weefwefwqg3, Ah, je vois, désolé, une crise de myopie. Oui, ce serait parfaitement bien.
Brian Hooper

113

Ma réponse répète ce que d'autres ont dit auparavant, mais j'ai pensé ajouter un exemple, en utilisant MySQL, uniquement parce que les réponses précédentes étaient un peu énigmatiques pour moi.

La forme générale de la commande que vous devez utiliser pour mettre à jour la colonne d'une seule ligne:

UPDATE my_table SET my_column='new value' WHERE something='some value';

Et voici un exemple.

AVANT

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10104 | 
+------------+-------+
2 rows in set (0.00 sec)

FAIRE LE CHANGEMENT

mysql> update ae set port='10105' where aet='CDRECORD';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

APRÈS

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10105 | 
+------------+-------+
2 rows in set (0.00 sec)

Merci pour cette démonstration. La requête ci-dessus mettra à jour toutes les instances de CDRECORD dans votre colonne aet. Cependant, lors de la mise à jour d'une cellule spécifique dans une colonne spécifique, il est préférable de le faire en fonction de l'ID de la colonne, c'est-à-dire où ID = xx
Mohammed

Il est généralement préférable d'utiliser la clé primaire des lignes, l'identifiant unique des lignes (qui est souvent l'ID, mais pas toujours). Honnêtement, cela dépend de ce que vous voulez faire qui définit la "meilleure" pratique
Garret Gang

30

UPDATE ne changera que les colonnes que vous répertoriez spécifiquement.

UPDATE some_table
SET field1='Value 1'
WHERE primary_key = 7;

La WHEREclause limite les lignes mises à jour. En règle générale, vous l'utiliserez pour identifier la valeur de clé primaire (ou ID) de votre table, de sorte que vous ne mettiez à jour qu'une seule ligne.

La SETclause indique à MySQL les colonnes à mettre à jour. Vous pouvez lister autant ou aussi peu de colonnes que vous le souhaitez. Tout ce que vous ne listez pas ne sera pas mis à jour.


11

UPDATE ne modifie que les valeurs que vous spécifiez:

UPDATE table SET cell='new_value' WHERE whatever='somevalue'

9

Essayez ce qui suit:

UPDATE TableName SET ValueName=@parameterName WHERE
IdName=@ParameterIdName

Veuillez ajouter quelques explications à votre réponse afin que les autres puissent en tirer des leçons - qu'est-ce que cela @parameterName fait?
Nico Haase le

7

METTRE À JOUR LE <tablename> SET DE TABLE <COLUMN=VALUE> OU <CONDITION>

Exemple:

UPDATE TABLE teacher SET teacher_name='NSP' WHERE teacher_id='1'

3

essaye ça.

UPDATE `database_name`.`table_name` SET `column_name`='value' WHERE `id`='1';

1
Bienvenue dans Stack Overflow! Bien que cet extrait de code soit le bienvenu et puisse fournir une aide, il serait grandement amélioré s'il incluait une explication de la façon dont il répond à la question. Sans cela, votre réponse a beaucoup moins de valeur éducative - rappelez-vous que vous répondez à la question pour les lecteurs à l'avenir, pas seulement pour la personne qui la pose maintenant! Veuillez modifier votre réponse pour ajouter une explication et donner une indication des limites et des hypothèses applicables.
Toby Speight

0

Certaines des colonnes de MySQL ont une clause "on update", voir:

mysql> SHOW COLUMNS FROM your_table_name;

Je ne sais pas comment mettre à jour cela, mais je publierai une modification lorsque je le saurai.


S'il y a un "on update", il sera dans la colonne "Extra" du tableau que vous obtenez lors de l'exécution de la commande ci-dessus.
Jake_Howard
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.