einzelne Werte in mehrerer Tabellen ändern...

kira12

Benutzer
Beiträge
9
Hallo Leute,

ich habe eine MariaDB 10.5 Datenbank und möchte dort über 17000 Tabellen den Wert laststock ändern. aktuell ist laststock 0 und soll aber 1 werden. Mit:
Code:
SELECT * FROM `s_articles` WHERE laststock = '0'
lassen sich alle laststock anzeigen, aber wie kann ich die ändern, wo muß ich UPDATE eintragen? Ich habe mir das manual angesehen aber irgendwie fehlt mir da die richtige Idee?

danke ré

P.S. Backup der Datenbank habe ich natürlich erstellt ;-)
 
Werbung:
update <tabelle> set laststock = 1 where laststock = 0;

Warum hast Du 1700 Tabellen mit solch einer Spalte? Klingt krank. Du wirst diesen Befehl also auf alle 1700 Tabellen anwenden müssen. Mit PostgreSQL hätte ich da zwar eine Idee, aber MySQL ...
 
habe 17000 Tabellen zum ändern :-( Gibts da keine andere Möglichkeit?
Nur sicherheitshalber, normalerweise kommen hier Anfragen, da gibt es:
17000 Datensätze zu ändern, also Records, "Zeilen".
Nicht aber in 17000 verschieben Tabellen!

Wie lauten bspw. die Tabellennamen?
Wenn das wirklich kein Missverständnis ist, solltest Du dafür ein Skript einsetzen, was Änderungen auf all den Tabellen durchführt und die Vorgänge auch protokolliert.
 
Hallo,

ja es sind ca. 17000 Tabellen wo eine Zeile geändert werden soll. Siehe Bild, keine Ahnung wie so ein script auszusehen hat :-( Diese Tabelle habe ich schon geändert.

Gruß ré
 

Anhänge

  • Bildschirmfoto 2021-10-30 um 14.57.38.png
    Bildschirmfoto 2021-10-30 um 14.57.38.png
    253,5 KB · Aufrufe: 8
ja es sind ca. 17000 Tabellen wo eine Zeile geändert werden soll. Siehe Bild, keine Ahnung wie so ein script auszusehen hat

Tabellennamen kannst Du Dir aus dem information_schema holen - falls MySQL sowas schon hat, ich nutze kein MySQL. 17.000 offenbar identisch aufgebaute Tabellen lassen mich sehr stark vermuten, daß das alles komplett für den Eimer ist.
Aber hey - not my department.
 
Hallo,

ich habe mich falsch ausgedrückt, es ist eine Tabelle mit 17000 Datensätzen wo eine Spalte/Zeile/data wie auch immer man das nennt geändert werden muß.

Gruß ré
 
Ok, den Befehl hast Du ja dann.
Falsch ausgedrückt ist dann aber eine leichte Untertreibung. Ich will Dich nicht dissen, aber wenn Du in der Lagerverwaltung oder Produktkatalog fröhlich updatest und nicht wirklich haargenau weisst, was Du tust, dann ist das glaub ich keine gute Idee.

Ich vermute mal ganz stark, dass es keine Eigenentwicklung ist und demnach die Software eines Fremdanbieters. Da kommst Du ganz schnell in wildes Fahrwasser, Garantieverlust, Supportverlust, ..

Ich würde mir jedenfalls Unterstützung holen, innerhalb der Firma und um Rat/Zustimmung für die Maßnahme fragen.
Ein "Backup" hat an der Stelle leider den Nachteil, dass alles, was zwischen Backup und Update geschieht, nicht im Backup ist.
 
Hallo,

ich gebe dir völlig recht, derartige Aktionen sind gefährlich. Aber der Shop ist derzeit nicht online. Wir wechseln von einer Shopsoftware zu einer anderen und haben gerade die Daten migriert. Der neue Shop ist natürlich ganz anders ausgebaut wie der alte Shop, deswegen war das Attribut beim alten nicht vorhanden und bei neuen ist es auf 0 gesetzt. Aber wenn ich über die Oberfläche des Shops die Änderung durchführe funktioniert es, somit sollte es auch funktionieren wenn ich die Änderung in der Datenbank für alle Artikel durchführe.
Mit welchem Befehl ändere ich den Eintrag? Mit
Code:
SELECT * FROM `s_articles` WHERE laststock = '0'
kann ich den Eintrag zumindest auslesen.

Gruß ré
 
Damit:

Aber dass jemand eine Datenbank updated der nicht einmal elementarste Grundlagen von SQL beherrscht ist - verzeih - etwas gruselig. Unbedingt vorher Daten sichern.

Hallo Walter,

deswegen habe ich ja hier gefragt um da keinen Mist zu bauen. Backup habe ich natürlich gemacht. Der Shop ist derzeit noch nicht aktiv, sondern im Aufbau...

Gruß ré
 
Aber wenn ich über die Oberfläche des Shops die Änderung durchführe funktioniert es, somit sollte es auch funktionieren wenn ich die Änderung in der Datenbank für alle Artikel durchführe.
Solche Dinge zu testen, ist natürlich sinnvoll.
Für weitere Aktionen dazu noch ein Hinweis. Der Vergleich aus Frontend Aktionen und Resultat mit einem manuellen Update kann trügerisch sein. Es ist generell überhaupt nicht so, dass eine (einzige) Datenänderung im Frontend transparent einer Änderung im Backend entspricht. Um das sicher zu wissen, braucht es ohne Kenntnis der Funktionsweise und des Datenmodells im Grunde eine Art Reverse Enginieering der Änderung. Also Frontendaktion durchführen und dann im Backend ein Diff zum vorigen Stand machen - natürlich als einziger User-
Änderungen eines einzigen Datums können über Trigger, Business Operation usw. weitere Änderungen in der DB auslösen.
Viel Erfolg!
 
Hallo,

genauso bin ich auch vorgegangen. Datenbestand kontrolliert --> im backend geändert und mit dem Datenbestand vergleichen. Das brachte mich ja auf die Idee die Änderung der 17000 Artikel in der Datenbank durchzuführen ;-) Es hat auch hervorragend funktioniert.

Gruß ré
 
Werbung:
Zurück
Oben