2016-04-13 4 views
2

Ich habe eine einfache Update-Abfrage:Anzahl der Zeilen angepasst und verändert nicht gleich

UPDATE mytable SET mycolumn = replace(mycolumn, "somestring", "otherstring") 
WHERE mycolumn LIKE '%somestring%'; 

Beispielausgabe:

Query OK, 198 rows affected (24.18 sec) 
Rows matched: 200 Changed: 198 Warnings: 0 

Wie es möglich ist, dass Zeilen Zahl geändert wird weniger als abgestimmt? Jede übereinstimmende Zeile sollte in der Spalte somestring enthalten sein, daher sollte sie ersetzt werden.

Antwort

3

Dies war ein bug, der gemeldet wurde und nun in MySQL 5.1 wieder zurückgesetzt wird.

Vom gleichen:

, ob die Anzahl der aktualisierten Zeilen aus der Anzahl der Zeilen unterschiedlich ist gefunden ist motorspezifisch. Einige Speicher-Engines können nur eine Teilmenge der Spalten lesen, wenn sie ein Update durchführen (InnoDB ist eine solche Engine). So kann der Server nicht zuverlässig überprüfen, ob eine Zeile nicht aktualisiert wird. Und deshalb wird es immer die Anzahl der Zeilen aktualisiert gleich der Anzahl der Zeilen gefunden haben. Der Grund dafür, dass dies anders in 5.0 funktioniert, ist die Tatsache, dass in 5.1 der Server Informationen für die Spalten übergibt, die er an InnoDB lesen muss, und daher nicht werden alle Spalten mehr gelesen. In 5.0 wurde diese Information nicht an die InnoDB-Speicher-Engine übergeben, so dass immer alle Spalten zurückgegeben wurden, und es wurde geprüft, ob eine Zeilenaktualisierung möglich war.

+0

Oh, ich dachte, ich sql irgendwie vergessen .... – pwas