Ich habe eine Funktion, die drei Tabellen aktualisiert, aber ich verwende drei Abfragen, um dies auszuführen. Ich möchte einen bequemeren Ansatz für bewährte Verfahren verwenden.
Wie kann ich mehrere Tabellen in MySQL mit einer einzigen Abfrage aktualisieren?
mysql
sql
sql-update
Adamski
quelle
quelle
Antworten:
Nehmen Sie den Fall von zwei Tabellen
Books
undOrders
. Wenn wir die Anzahl der Bücher in einer bestimmten Reihenfolge mitOrder.ID = 1002
inOrders
table erhöhen, müssen wir auch die Gesamtzahl der in unserem Bestand verfügbaren Bücher um dieselbe Anzahl inBooks
table reduzieren .quelle
Um zu sehen, was hier aktualisiert wird, können Sie dies in eine select-Anweisung konvertieren, z.
Ein Beispiel mit denselben Tabellen wie die andere Antwort:
BEARBEITEN:
Fügen wir zum Spaß etwas Interessanteres hinzu.
Angenommen, Sie haben eine Tabelle von
books
und eine Tabelle vonauthors
. Dubooks
hast eineauthor_id
. Bei der ursprünglichen Erstellung der Datenbank wurden jedoch keine Fremdschlüsseleinschränkungen eingerichtet. Später führte ein Fehler im Front-End-Code dazu, dass einige Bücher mit ungültigenauthor_id
s hinzugefügt wurden . Als DBA möchten Sie nicht alle diese Punkte durchgehen müssen, umbooks
zu überprüfen, wasauthor_id
sein soll. Daher wird die Entscheidung getroffen, dass die Datenerfassungsgeräte denbooks
Hinweis nach rechts korrigierenauthors
. Aber es gibt zu viele Bücher, um sie durchzugehen, und sagen wir, Sie wissen, dass diejenigen, die eine habenauthor_id
, die einer tatsächlichen entspricht,author
korrekt sind. Es sind nur diejenigen, die nicht existierenauthor_id
s, die ungültig sind. Es gibt bereits eine Benutzeroberfläche, über die die Benutzer die Buchdetails aktualisieren können, und die Entwickler möchten dies nicht nur für dieses Problem ändern. Da die vorhandene Benutzeroberfläche dies jedoch tutINNER JOIN authors
, werden alle Bücher mit ungültigen Autoren ausgeschlossen.Was Sie tun können, ist Folgendes: Fügen Sie einen gefälschten Autorendatensatz wie "Unbekannter Autor" ein. Aktualisieren Sie dann
author_id
alle fehlerhaften Datensätze, um auf den unbekannten Autor zu verweisen. Anschließend können die Datenerfassungsgeräte nach allen Büchern suchen, bei denen der Autor auf "Unbekannter Autor" eingestellt ist, den richtigen Autor suchen und diese korrigieren.Wie aktualisieren Sie alle fehlerhaften Datensätze, um auf den unbekannten Autor zu verweisen? So (vorausgesetzt, der unbekannte Autor
author_id
ist 99999):Die oben genannten werden auch aktualisiert
books
, die einenNULL
author_id
an den unbekannten Autor haben. Wenn Sie das nicht wollen, können Sie natürlich hinzufügenAND books.author_id IS NOT NULL
.quelle
Sie können dies auch mit einer Abfrage tun, indem Sie einen Join wie folgt verwenden:
Und dann senden Sie einfach diese eine Anfrage. Weitere Informationen zu Joins finden Sie hier: http://dev.mysql.com/doc/refman/5.0/en/join.html . Es gibt auch einige Einschränkungen für die Bestellung und Einschränkung mehrerer Tabellenaktualisierungen, über die Sie hier lesen können: http://dev.mysql.com/doc/refman/5.0/en/update.html (nur Strg + F "Join").
quelle
Dafür sind gespeicherte Prozeduren normalerweise gedacht: um mehrere SQL-Anweisungen in einer Sequenz zu implementieren. Mithilfe von Rollbacks können Sie sicherstellen, dass sie als eine Arbeitseinheit behandelt werden, dh entweder alle oder keine ausgeführt werden, um die Datenkonsistenz zu gewährleisten.
quelle
Wenn Sie mehrere Abfragen sagen, meinen Sie mehrere SQL-Anweisungen wie folgt:
Oder mehrere Abfragefunktionsaufrufe wie in:
Ersteres kann mit einem einzigen mySqlQuery-Aufruf durchgeführt werden. Wenn Sie dies erreichen möchten, rufen Sie einfach die mySqlQuery-Funktion auf folgende Weise auf:
Dadurch werden alle drei Abfragen mit einem Aufruf von mySqlQuery () ausgeführt.
quelle