Datensätze updaten direkt über SQL-Anweisung

Für das updaten eines Datensatzes benötigen wir einen eindeutigen Bezug. Wir könnten zwar sagen:

  • ändere bei Müller den Vornamen in „Simone“

Aber was ist, wenn es mehr als einen Müller gibt?

Auch das Datum der Erstellung ist nicht eindeutig (wenn auch relativ unwahrscheinlich, dass jemand am gleichen Tag sogar zur gleichen Sekunde einen Datensatz angelegt hat).

Hier kommt unser Feld „id“ zum Zuge. Dieses ist laut definition einmalig. Hier haben wir unseren eindeutigen Bezug. Sprich unsere Regel würde lauten

  • ändere bei Feld „id“ mit der Nummer 2 den Vornamen in „Simone“

Hierzu benötigen wir nun eine SQL-Anweisung (sprich eine SQL-Query).

Im ersten Beispiel wollen wir das Erstellungsdatum ändern. Dieses setzen wir auf das „2016-12-24 20:00:00“

UPDATE welche-tabelle SET welches-feld = 'neuer-wert'
UPDATE kontakte SET erstellt = '2016-12-24 20:00:00'

Diese SQL-Anweisung können wir nun auch direkt in phpMyAdmin eingeben – ein guter Test, ob eine SQL-Anweisung funktioniert. Im Reiter SQL können wir nun direkt auch SQL-Befehle eingeben. Hier immer sehr vorsichtig, da man damit auch schnell Datenbankinhalte zum Teufel jagen kann.

SQL update über phpMyAdmin
SQL update über phpMyAdmin

Als Feedback bekommen wir, dass 2 Datensätze von der SQL-Anweisung betroffen worden sind – sprich 2 Datensätze wurden geändert.

Update betrifft 2 Datensätze
Update betrifft 2 Datensätze

Sehr schön ist, dass wir hier auch nochmals unsere SQL-Anweisung sehen.

Gehen wir nun zurück auf den Reiter „anzeigen“ ist das Ergebnis sichtbar. Wir haben nun bei beiden beide Datensätzen das erstell-Datum auf Weihnachten „gesetzt“.

Meisten möchte man nicht ALLES, sondern nur gezielt einzelne Datensätze setzen. Dazu müssen wir eine Bedingung setzen. Unsere SQL-Anweisung wird also ergänzt mit where und der Bedingung.

UPDATE kontakte SET erstellt = '2016-12-25 21:00:00' WHERE id = '2'

Somit wird nur für den Datensatz mit der ID 2 die angewendet.

update mit Bedingung WHERE
update mit Bedingung WHERE
Feedback von phpMyAdmin, dass 1 Datensatz betroffen ist
Feedback von phpMyAdmin, dass 1 Datensatz betroffen ist
Anzeige mit Änderung in phpMyAdmin
Anzeige mit Änderung in phpMyAdmin

Exkursion: mehr Sicherheit durch Einschränkung

Läuft alles wie erwartet, haben wir genau den Datensatz geändert, den wir wollten. Läuft alles schief, weil wir uns in der Bedingung vertan haben, kann die ganze Datenbank betroffen sein. Das hat sich schneller, als man denkt.

Angenommen:

UPDATE kontakte SET erstellt='2016-12-25 21:00:00' WHERE 2='2'

Was geben wir mit der Anweisung mit:

Update in der Tabelle kontakte das Feld „erstellt“ WENN 2 = 2 ist

Und 2 ist immer 2 (sonst wäre es keine 2) – das trifft also immer zu und somit haben wir versehentlich alle Datensätze geändert!

Daher ist es sinnvoll, eine Einschränkung zu machen. Wenn es sicher ist, dass wir mit unserer update-Anweisung eh immer nur 1 Datensatz ändern wollen, können wir unsere SQL-Anweisung auch einschränken (limitieren). Und dazu gibt es in SQL die Anweisung LIMIT. Unsere falsche Anweisung von oben entschärft wäre dann:

UPDATE kontakte SET erstellt='2016-12-25 21:00:00' WHERE 2='2' LIMIT 1

Somit wäre nur 1 Datensatz davon betroffen und wir haben nicht die kompletten Datensätze ramponiert. Das klappt immer und überall. Sprich bei der korrekten SQL-Anweisung wäre die Erweiterung ohne Bedeutung, da es eh nur der eine Datensatz mit der id=2 ist.

UPDATE kontakte SET erstellt='2016-12-25 21:00:00' WHERE id='2' LIMIT 1

Also machen, wenn es logisch zulässig ist :) – sonst kann der Ärger echt groß sein, wenn man sich die erste Datenbank zerschossen hat.