Heim > Datenbank > MySQL-Tutorial > Was gibt die Update-Anweisung in MySQL zurück?

Was gibt die Update-Anweisung in MySQL zurück?

WBOY
Freigeben: 2022-05-19 16:25:00
Original
7768 Leute haben es durchsucht

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.

Was gibt die Update-Anweisung in MySQL zurück?

Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.

Was gibt die Update-Anweisung in MySQL zurück?

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
Nach dem Login kopieren

, dann ist das zurückgegebene Ergebnis Anzahl übereinstimmender Zeilen (Übereinstimmende Zeilen).

Wenn es lautet:

jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true
Nach dem Login kopieren

, 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
Nach dem Login kopieren

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.

Conbirmed

borrow 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 Parameter

useAffectedRows=true verwendet als Attribut der Verbindung.

Folgen Sie in

Connection connection = DriverManager.getConnection("jdbc:mysql://gitlab.fzghjx.com:3306/cron?useAffectedRows=true", "root", "root");
Nach dem Login kopieren

:

Continue: Die Verbindungsmethode lautet: java.sql.Driver#connect, die Implementierung lautet: com.mysql.jdbc.NonRegisteringDriver#connect

useAffectedRows =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 erhalten

Hier ist eine Reflexion, die Argumente sind

JDBC_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);
}
Nach dem Login kopieren
Schau nach, es ist der Konstruktor von ConnectionImp:

(übrigens: Die Isolationsstufe der Transaktion ist hier auf 2 gesetzt, Lesen wird festgeschrieben)

In diesem Konstrukt In der Funktion wird der Wert von useAffectedRows in der Verbindung initialisiert:

Es müssen 206 Eigenschaften festgelegt werden, und useAffectedRows steht auf Platz 190 (verschiedene Versionen von mysql-connect-java haben unterschiedliche Positionen).

Nachdem die Einstellungen abgeschlossen sind:

2, MysqlIO erstellen

Nach dem Festlegen der Eigenschaften ist es Zeit, MysqlIO zu erstellen:

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-Tutorial

Das 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage