Führt MySQL die Aktualisierungsanweisung erneut aus, wenn sie dieselben Daten enthält wie die ursprüngliche?

Führt MySQL die Aktualisierungsanweisung erneut aus, wenn sie dieselben Daten enthält wie die ursprüngliche?

Hintergrund

In diesem Artikel wird hauptsächlich getestet, ob die Update-Anweisung, die mit den Originaldaten identisch (d. h. unverändert) ist, in MySQL erneut ausgeführt wird, wenn MySQL die Update-Anweisung ausführt.

Testumgebung

  • MySQL 5.7.25
  • Centos 7.4

binlog_format ist ROW

Parameter

root@localhost: (keine) 04:53:15> Variablen wie „binlog_row_image“ anzeigen;
+------------------+--------+
| Variablenname | Wert |
+------------------+--------+
| binlog_row_image | VOLL |
+------------------+--------+
1 Zeile im Satz (0,00 Sek.)

root@localhost: (keine) 04:53:49> Variablen wie „binlog_format“ anzeigen; 
+---------------+-------+
| Variablenname | Wert |
+---------------+-------+
| binlog_format | REIHE |
+---------------+-------+
1 Zeile im Satz (0,00 Sek.)

root@localhost: Test 05:15:14> Variablen wie „transaction_isolation“ anzeigen;
+----------------------+-----------------+
| Variablenname | Wert |
+----------------------+-----------------+
| Transaktionsisolierung | WIEDERHOLBARES LESEN |
+----------------------+-----------------+
1 Zeile im Satz (0,00 Sek.)

Testschritte

Sitzung1

root@localhost: Test 04:49:48> Beginn;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

root@localhost: Test 04:49:52> Auswahl * aus Test, wobei ID = 1;
+----+------+------+------+
| ID | Seite | Mittel | Name |
+----+------+------+------+
| 1 | 999 | 871 | NW |
+----+------+------+------+
1 Zeile im Satz (0,00 Sek.)

root@localhost : (keine) 04:54:03> Engine-InnoDB-Status anzeigen\G Master-Status anzeigen\G
...
---
PROTOKOLL
---
Protokollsequenznummer 12090390
Protokoll gelöscht bis 12090390
Seiten bis 12090390 geleert
Letzter Kontrollpunkt bei 12090381
0 ausstehende Log-Leervorgänge, 0 ausstehende CHKP-Schreibvorgänge
33 Log-E/A's erledigt, 0,00 Log-E/A's/Sekunde

*************************** 1. Reihe ***************************
  Datei:mysql-bin.000001
  Position: 154
 Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Ausgeführtes_Gtid_Set: 
1 Zeile im Satz (0,00 Sek.)

Sitzung2

root@localhost: Test 04:47:45> Testsatz aktualisieren sid=55, wobei id =1;
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0

root@localhost : (keine) 04:54:03> Engine-InnoDB-Status anzeigen\G Master-Status anzeigen\G
...
---
PROTOKOLL
---
Protokollsequenznummer 12091486
Protokoll gelöscht bis 12091486
Seiten bis 12091486 geleert
Letzter Kontrollpunkt bei 12091477
0 ausstehende Log-Leervorgänge, 0 ausstehende CHKP-Schreibvorgänge
39 Log-E/A's erledigt, 0,00 Log-E/A's/Sekunde

*************************** 1. Reihe ***************************
  Datei:mysql-bin.000001
  Position: 500
 Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Ausgeführtes_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:1
1 Zeile im Satz (0,00 Sek.)

Sitzung1

root@localhost: Test 04:49:57> Testsatz aktualisieren sid=55, wobei id =1; 
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
Übereinstimmende Zeilen: 1 Geändert: 0 Warnungen: 0

root@localhost : (keine) 04:54:03> Engine-InnoDB-Status anzeigen\G Master-Status anzeigen\G
...
---
PROTOKOLL
---
Protokollsequenznummer 12091486
Protokoll gelöscht bis 12091486
Seiten bis 12091486 geleert
Letzter Kontrollpunkt bei 12091477
0 ausstehende Log-Leervorgänge, 0 ausstehende CHKP-Schreibvorgänge
39 Log-E/A's erledigt, 0,00 Log-E/A's/Sekunde

*************************** 1. Reihe ***************************
  Datei:mysql-bin.000001
  Position: 500
 Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Ausgeführtes_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:1
1 Zeile im Satz (0,00 Sek.)

root@localhost: Test 04:52:05> Auswahl * aus Test, wobei ID = 1;
+----+------+------+------+
| ID | Seite | Mittel | Name |
+----+------+------+------+
| 1 | 999 | 871 | NW |
+----+------+------+------+
1 Zeile im Satz (0,00 Sek.)

root@localhost: Test 04:52:42> Commit;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

root@localhost: Test 04:52:52> Auswahl * aus Test, wobei ID = 1;
+----+------+------+------+
| ID | Seite | Mittel | Name |
+----+------+------+------+
| 1 | 55 | 871 | NW |
+----+------+------+------+
1 Zeile im Satz (0,00 Sek.)

Zusammenfassen

Wenn binlog_format=row und binlog_row_image=FULL , muss MySQL alle Felder im Binärprotokoll aufzeichnen, damit beim Lesen der Daten alle Daten gelesen werden und keine Aktualisierungen doppelter Daten ausgeführt werden. Das heißt, MySQL ruft die von der InnoDB-Engine bereitgestellte Schnittstelle "Ändern in (1,55)" auf, die Engine stellt jedoch fest, dass der Wert mit dem ursprünglichen Wert identisch ist, aktualisiert ihn nicht und gibt direkt zurück

binlog_format ist STATEMENT

Parameter

root@localhost: (keine) 04:53:15> Variablen wie „binlog_row_image“ anzeigen;
+------------------+--------+
| Variablenname | Wert |
+------------------+--------+
| binlog_row_image | VOLL |
+------------------+--------+
1 Zeile im Satz (0,00 Sek.)

root@localhost: (keine) 05:16:08> Variablen wie „binlog_format“ anzeigen;
+---------------+-----------+
| Variablenname | Wert |
+---------------+-----------+
| binlog_format | ANWEISUNG |
+---------------+-----------+
1 Zeile im Satz (0,00 Sek.)

root@localhost: Test 05:15:14> Variablen wie „transaction_isolation“ anzeigen;
+----------------------+-----------------+
| Variablenname | Wert |
+----------------------+-----------------+
| Transaktionsisolierung | WIEDERHOLBARES LESEN |
+----------------------+-----------------+
1 Zeile im Satz (0,00 Sek.)

Testschritte

Sitzung1

root@localhost: Test 05:16:42> Beginn;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

root@localhost: Test 05:16:44> Auswahl * aus Test, wobei ID = 1;
+----+------+------+------+
| ID | Seite | Mittel | Name |
+----+------+------+------+
| 1 | 111 | 871 | NW |
+----+------+------+------+
1 Zeile im Satz (0,00 Sek.)

root@localhost : (keine) 05:16:51> Engine-InnoDB-Status anzeigen\G Master-Status anzeigen\G
...
---
PROTOKOLL
---
Protokollsequenznummer 12092582
Protokoll gelöscht bis 12092582
Seiten bis 12092582 geleert
Letzter Kontrollpunkt bei 12092573
0 ausstehende Log-Leervorgänge, 0 ausstehende CHKP-Schreibvorgänge
45 Log-E/A's erledigt, 0,00 Log-E/A's/Sekunde

*************************** 1. Reihe ***************************
    Datei:mysql-bin.000001
   Position: 154
  Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Ausgeführtes_Gtid_Set: 
1 Zeile im Satz (0,00 Sek.)

Sitzung2

root@localhost: Test 05:18:30> Testsatz aktualisieren sid=999, wobei id =1;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0

root@localhost : (keine) 05:18:47> Engine-InnoDB-Status anzeigen\G Master-Status anzeigen\G
...
---
PROTOKOLL
---
Protokollsequenznummer 12093678
Protokoll gelöscht bis 12093678
Seiten bis 12093678 geleert
Letzter Kontrollpunkt bei 12093669
0 ausstehende Log-Leervorgänge, 0 ausstehende CHKP-Schreibvorgänge
51 Log-E/A's erledigt, 0,14 Log-E/A's/Sekunde

*************************** 1. Reihe ***************************
    Datei:mysql-bin.000001
   Position: 438
  Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Ausgeführtes_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:1
1 Zeile im Satz (0,00 Sek.)

Sitzung1

root@localhost: Test 05:16:47> Testsatz aktualisieren sid=999, wobei id =1;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
Übereinstimmende Zeilen: 1 Geändert: 0 Warnungen: 0

root@localhost : (keine) 05:20:03> Engine-InnoDB-Status anzeigen\G Master-Status anzeigen\G
...
---
PROTOKOLL
---
Protokollsequenznummer 12094504
Protokoll gelöscht bis 12094504
Seiten bis 12094504 geleert
Letzter Kontrollpunkt bei 12094495
0 ausstehende Log-Leervorgänge, 0 ausstehende CHKP-Schreibvorgänge
56 Log-E/A's erledigt, 0,00 Log-E/A's/Sekunde

*************************** 1. Reihe ***************************
    Datei:mysql-bin.000001
   Position: 438
  Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Ausgeführtes_Gtid_Set: 8392d215-4928-11e9-a751-0242ac110002:1
1 Zeile im Satz (0,00 Sek.)

root@localhost: Test 05:19:33> Auswahl * aus Test, wobei ID = 1;  
+----+------+------+------+
| ID | Seite | Mittel | Name |
+----+------+------+------+
| 1 | 999 | 871 | NW |
+----+------+------+------+
1 Zeile im Satz (0,00 Sek.)

root@localhost: Test 05:20:44> Commit;
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

root@localhost: Test 05:20:57> Auswahl * aus Test, wobei ID = 1;
+----+------+------+------+
| ID | Seite | Mittel | Name |
+----+------+------+------+
| 1 | 999 | 871 | NW |
+----+------+------+------+
1 Zeile im Satz (0,00 Sek.)

Zusammenfassen

Wenn binlog_format=statement und binlog_row_image=FULL ist, führt InnoDB die Aktualisierungsanweisung sorgfältig aus, d. h. die Operation „Ändern Sie diesen Wert auf (1.999)“, sperrt, was gesperrt werden muss, und aktualisiert, was aktualisiert werden muss.

Das ist alles für diesen Artikel. Ich hoffe, dass der Inhalt dieses Artikels für Ihr Studium oder Ihre Arbeit von gewissem Referenzwert ist. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • So ermitteln Sie die Abfragezeit einer MySQL-SQL-Anweisung in PHP
  • Wie wird eine SQL-Anweisung in MySQL ausgeführt?

<<:  Vue realisiert Web-Online-Chat-Funktion

>>:  So legen Sie die Umgebungsvariable PATH im Linux-System fest (3 Methoden)

Artikel empfehlen

Beispiele für die Verwendung von React Ref

Inhaltsverzeichnis Was ist ref So verwenden Sie r...

Einfache Analyse von EffectList in React

Inhaltsverzeichnis EffectList-Sammlung Effektlist...

Beispielcode zum Vergleich verschiedener Syntaxformate von vue3

Die Standardvorlagenmethode ähnelt vue2 und verwe...

React-Diagramm Serialisierung JSON Interpretation Fallanalyse

Das Ziel dieses Dokuments ist es, die JSON-Serial...

HTML5+CSS3-Codierungsstandards

Die goldene Regel Unabhängig davon, wie viele Per...

Zusammenfassung des in JS implementierten Minesweeping-Projekts

Dieser Artikel enthält die Zusammenfassung des JS...

So verwenden Sie Nginx zum Simulieren der Canary-Freigabe

Dieser Artikel stellt die Blue-Green-Bereitstellu...

Verwendung von Vue-Filtern und Probleme bei der Zeitstempelkonvertierung

Inhaltsverzeichnis 1. Das Konzept schnell erkenne...

Drei Möglichkeiten zum Parsen von QR-Codes mit Javascript

Inhaltsverzeichnis 1. Verwenden Sie JavaScript, u...

So kapseln Sie die Tabellenkomponente von Vue Element

Beim Kapseln von Vue-Komponenten werde ich weiter...

So fragen Sie Daten aus mehreren unabhängigen Tabellen und Paging in MySQL ab

Mysql mehrere unabhängige Tabellen Abfragedaten u...