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

Welcher Befehl eignet sich besser für die unscharfe Suche nach Dateien in Linux?

1. Einleitung In diesem Artikel wird hauptsächlic...

Prozessdiagramm zur Implementierung des CentOS-IP-Verbindungsnetzwerks

1. Melden Sie sich beim System an und geben Sie d...

Detaillierte Einführung in das benutzerdefinierte Docker-Netzwerk

Inhaltsverzeichnis Benutzerdefiniertes Docker-Net...

Docker stellt Mysql, .Net6, Sqlserver und andere Container bereit

Inhaltsverzeichnis Installieren Sie Docker unter ...

So importieren Sie SQL-Dateien in Navicat Premium

Ich habe heute mit der Arbeit an meinem Abschluss...

Beispielcode zur Implementierung einer einfachen Suchmaschine mit MySQL

Inhaltsverzeichnis Vorwort Einführung Ngram-Vollt...

7 interessante Möglichkeiten, versteckte Elemente in CSS zu erreichen

Vorwort Die Ähnlichkeiten und Unterschiede zwisch...

Detaillierte Schritte zum manuellen Konfigurieren der IP-Adresse in Linux

Inhaltsverzeichnis 1. Geben Sie zuerst das Konfig...

Lösung für das Problem „VMware-virtuelle Maschine ohne Netzwerk“

Inhaltsverzeichnis 1. Problembeschreibung 2. Prob...

Teilen Sie 13 grundlegende Syntax von Typescript

Inhaltsverzeichnis 1. Was ist Ts 2. Grundlegende ...

Telnet wird im Alpine-Image zu busybox-extras verschoben

Das Telnet im Alpine-Image wurde nach Version 3.7...