Ändern Sie die Daten einer Zelle in MySQL

156

Wie kann ich die Daten in nur einer Zelle einer MySQL-Tabelle ändern? Ich habe ein Problem mit UPDATE, da dadurch alle Parameter in einer Spalte geändert werden, aber nur einer geändert werden soll. Wie?

kasrsf
quelle
Was hast du bisher versucht? Können Sie die von Ihnen verwendete Abfrage freigeben? Normalerweise aktualisieren Sie nicht "alle Parameter in einer Spalte"
Nico Haase

Antworten:

191

Sie müssen wahrscheinlich angeben, welche Zeilen Sie aktualisieren möchten ...

UPDATE 
    mytable
SET 
    column1 = value1,
    column2 = value2
WHERE 
    key_value = some_value;
Brian Hooper
quelle
1
Ich war durch diese Antwort verwirrt und dachte, dass SET ausgewählte Zeilen zum Ändern ausgewählt hat und WO sie geändert wurden.
Keith
Kann die Bedingung in WHERE Spalte1 = alter_Wert sein?
weefwefwqg3
@ weefwefwqg3, ja, das kann es, aber es hat keinen Sinn. Wenn Sie den Wert nicht ändern, lassen Sie ihn einfach aus dem SET-Teil heraus.
Brian Hooper
1
@ Brian Hooper: Ich muss den Wert ändern, ich will fragen, ob ich das kann: UPDATE mytable SET column1 = new_value WHERE column1 = old_value;??
weefwefwqg3
2
@ weefwefwqg3, Ah, ich sehe, sorry, einen Anfall von Kurzsichtigkeit. Ja, das wäre vollkommen in Ordnung.
Brian Hooper
112

Meine Antwort wiederholt, was andere zuvor gesagt haben, aber ich dachte, ich würde ein Beispiel hinzufügen MySQL, nur weil die vorherigen Antworten für mich etwas kryptisch waren.

Die allgemeine Form des Befehls, den Sie zum Aktualisieren der Spalte einer einzelnen Zeile verwenden müssen:

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

Und hier ist ein Beispiel.

VOR

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

ÄNDERUNG MACHEN

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

NACH DEM

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10105 | 
+------------+-------+
2 rows in set (0.00 sec)
slm
quelle
Danke für diese Demonstration. Die obige Abfrage aktualisiert alle Instanzen von CDRECORD in Ihrer Spalte aet. Wenn Sie jedoch eine bestimmte Zelle in einer bestimmten Spalte aktualisieren, ist es besser, dies basierend auf der ID der Spalte zu tun, dh mit ID = xx
Mohammed
Normalerweise ist es am besten, den Zeilenprimärschlüssel zu verwenden, den eindeutigen Bezeichner der Zeilen (häufig die ID, aber nicht immer). Ehrlich gesagt hängt es davon ab, was Sie tun möchten, was die "beste" Praxis definiert
Garret Gang
30

UPDATE ändert nur die Spalten, die Sie speziell auflisten.

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

Die WHEREKlausel begrenzt, welche Zeilen aktualisiert werden. Im Allgemeinen würden Sie dies verwenden, um den Primärschlüssel (oder die ID) Ihrer Tabelle zu identifizieren, sodass Sie nur eine Zeile aktualisieren.

Die SETKlausel teilt MySQL mit, welche Spalten aktualisiert werden sollen. Sie können so viele oder so wenige Spalten auflisten, wie Sie möchten. Alle, die Sie nicht auflisten, werden nicht aktualisiert.

VoteyDisciple
quelle
11

UPDATE ändert nur die von Ihnen angegebenen Werte:

UPDATE table SET cell='new_value' WHERE whatever='somevalue'
grunzte
quelle
9

Versuche Folgendes:

UPDATE TableName SET ValueName=@parameterName WHERE
IdName=@ParameterIdName
user3668628
quelle
Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können - was macht das @parameterName ?
Nico Haase
7

UPDATE TABLE <tablename> SET <COLUMN=VALUE> WHERE <CONDITION>

Beispiel:

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

Versuche dies.

UPDATE `database_name`.`table_name` SET `column_name`='value' WHERE `id`='1';
abhay
quelle
1
Willkommen bei Stack Overflow! Während dieser Code - Schnipsel zu begrüßen ist, und etwas Hilfe bieten kann, würde es erheblich verbessert , wenn es eine Erklärung enthalten von , wie es um die Frage anspricht. Ohne das hat Ihre Antwort einen viel geringeren pädagogischen Wert - denken Sie daran, dass Sie die Frage in Zukunft für die Leser beantworten, nicht nur für die Person, die jetzt fragt! Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, und geben Sie an, welche Einschränkungen und Annahmen gelten.
Toby Speight
0

Einige der Spalten in MySQL haben eine "on update" -Klausel, siehe:

mysql> SHOW COLUMNS FROM your_table_name;

Ich bin nicht sicher, wie ich das aktualisieren soll, werde aber eine Bearbeitung veröffentlichen, wenn ich es herausfinde.

Jake_Howard
quelle
Wenn es ein "On Update" gibt, befindet es sich in der Spalte "Extra" der Tabelle, die Sie erhalten, wenn Sie den obigen Befehl ausführen.
Jake_Howard