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?

kasrsf
la source
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;
Brian Hooper
la source
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)
slm
la source
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.

VoteyDisciple
la source
11

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

UPDATE table SET cell='new_value' WHERE whatever='somevalue'
grogna
la source
9

Essayez ce qui suit:

UPDATE TableName SET ValueName=@parameterName WHERE
IdName=@ParameterIdName
user3668628
la source
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'
NSP
la source
3

essaye ça.

UPDATE `database_name`.`table_name` SET `column_name`='value' WHERE `id`='1';
abhay
la source
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.

Jake_Howard
la source
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