Das Rückgabeergebnis der Update-Anweisung in MySQL: 1. Wenn in der Datenbank-URL kein Parameter „useAffectedRows=true“ vorhanden ist, wird die Anzahl der übereinstimmenden Zeilen zurückgegeben. 2. Wenn der Parameter „useAffectedRows=true“ vorhanden ist die Datenbank-URL, die betroffenen Zeilen werden als Nummer zurückgegeben.
Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.
Wie viele übereinstimmende Zeilen ergeben sich aus der Update-Anweisung? Oder beeinflusst es die Anzahl der Zeilen?
Lassen Sie uns zunächst über die Ergebnisse sprechen: Wenn die URL der Datenbank lautet:
jdbc:mysql://gitlab.fzghjx.com:3306/cron
, dann ist das zurückgegebene Ergebnis Anzahl übereinstimmender Zeilen (Übereinstimmende Zeilen).
Wenn es lautet:
jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true
, dann wird die Anzahl der betroffenen Zeilen (geändert) zurückgegeben.
Zusammenfassend:
Wenn in der URL kein Parameter „useAffectedRows=true“ vorhanden ist, wird die Anzahl der übereinstimmenden Zeilen zurückgegeben. Wenn ja, wird die Anzahl der betroffenen Zeilen zurückgegeben.
Wie kann der Rückgabewert auf die Anzahl der betroffenen (geänderten) Datensätze festgelegt werden?
Fügen Sie einfach useAffectedRows=true zum MySQL-Datenverbindungs-URL-Parameter hinzu.
jdbc.url=jdbc:mysql://localhost:3306/ssm?useAffectedRows=true
Erweitertes Wissen:
Raten Sie mal!
Wenn ich über diese Frage nachdenke, gibt es zunächst zwei Antworten: 1. Treffen Sie eine Beurteilung im Rückgabeergebnis des MySQL-Servers. Wenn dies auf true gesetzt ist, geben Sie den Wert der übereinstimmenden Zeilen zurück. , dann wird der Wert von Changed zurückgegeben. 2. Wählen Sie diesen Wert aus, wenn Sie zur Abfrageanweisung zurückkehren.
Conbirmedborrow ein Bild, um den gesamten Prozess der Erstellung einer Verbindung zu veranschaulichen:
(Bild aufgenommen von: https://blog.csdn.net/c929833623lvcha/article/details/44517245 )
Nachdem ich eine Weile recherchiert hatte, stellte ich fest, dass beide Ideen falsch waren. Konkret:
Ich habe eine einfache JDBC-Abfrage geschrieben:1, Verbindung herstellen
Laut Quellcode und Tracking wird beim Herstellen einer Verbindung durch MySQL der ParameteruseAffectedRows=true verwendet als Attribut der Verbindung.
Connection connection = DriverManager.getConnection("jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true", "root", "root");
:
Continue: Die Verbindungsmethode lautet: java.sql.Driver#connect, die Implementierung lautet: com.mysql.jdbc.NonRegisteringDriver#connectuseAffectedRows =wahr Lesen Sie die Methode com.mysql.jdbc.NonRegisteringDriver#parseURL ein und legen Sie sie in den Eigenschaften-Requisiten fest. Weiter unten: com.mysql.jdbc.ConnectionImpl#getInstance, um die Instanz von Connectiong zu erhaltenHier ist eine Reflexion, die Argumente sindJDBC_4_CONNECTION_CTOR
Der Konstruktor von JDBC wird verwendet:JDBC The Konstruktor ist:
public JDBC4Connection(String hostToConnectTo, int portToConnectTo, Properties info, String databaseToConnectTo, String url) throws SQLException { super(hostToConnectTo, portToConnectTo, info, databaseToConnectTo, url); }
Hier gibt es die Option „Hochverfügbarkeit“. Wenn ja, wird ein Retry-IO-Link erstellt. Andernfalls erstellen Sie eine E/A-Verbindung, die nur einmal versucht wird und bei einem Fehler nicht erneut versucht wird. Diese Option wird auch in der URL durch die Einstellung autoReconnect=true aktiviert. ?? com.mysql.jdbc.MysqlIO#doHandshake)
Der Wert dieser CLIENT_FOUND_ROWS ist: Das heißt, der Wert der vorletzten Ziffer des Low-Bits wird für- oder -Operationen verwendet. Bei Verwendung von AffectsRows werden keine
- oder-Vorgänge ausgeführt.
Nach dem Einrichten senden Sie es über den MySQL-Ausgabe-Socket an den MySQL-Server:
MySQL-Ausgabequelle: Wird beim Erstellen von MysqlIO erstellt.
ok, es ist ein einfacher Vorgang. Schauen wir uns als nächstes die TCP-Nachricht an:4, Nachrichtenanalyse:
useAffectedRows=true:Senden Sie eine Anfrage an den MySQL-Server:
Antwort des MySQL-Servers:
useAffectedRows=false:
Senden Sie eine Anfrage an den MySQL-Server:
Antwort des MySQL-Servers:
Aus der obigen Nachricht Es ist ersichtlich, dass
useAffectedRows wahr ist und false, der Rückgabewert des MSYQL-Servers ist unterschiedlich. Schließlich ist das von JDBC erhaltene Rückgabeergebnis der Wert der betroffenen Zeilen in der Nachricht. JDBC wird direkt aus den Ergebnissen von msyql abgerufen und führt lediglich eine gewisse Analyse und Filterung der Ergebnisse durch. Dies beweist, dass die anfängliche Vermutung falsch war. Empfohlenes Lernen:
MySQL-Video-TutorialDas obige ist der detaillierte Inhalt vonWas gibt die Update-Anweisung in MySQL zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!