Oczyszczam wiele moich tabel / baz danych i napotkałem problem. Kiedy wykonuję większość poleceń, które zmieniają dane w tabeli (tj. DELETE FROM lub UPDATE), polecenie powraca jako zakończone, ale tak naprawdę nic nie robi.

to znaczy

mysql> SELECT * FROM members WHERE username = "Alex";
(Returns alex row).
mysql> DELETE FROM members WHERE username = "Alex";
(Says is completed, 0 row affected)
mysql> SELECT * FROM members WHERE username = "Alex";
(Returns alex row).

To nie powinno się zdarzyć, kiedy uruchomię polecenie delete, spodziewam się, że faktycznie usunie wiersze. Jednak i tutaj jest dziwna część, jeśli pozostanę zalogowany przez chwilę, wiersze w końcu zostaną usunięte. Jeśli natychmiast wyjdę, wiersze w ogóle się nie usuwają.

To nie jest dokładnie ten kod, który uruchamiam (pracuję z dużo większą liczbą warunków / większymi DB), ale koncepcja jest dokładnie taka sama. Sprawdzam również usunięcie za pomocą adminer.php (menedżer MySQL z plikiem 1 php, taki jak phpmyadmin), a rejestracja wszystkich usunięć / aktualizacji zajmuje około godziny.

Zakładam, że polecenia są w kolejce lub w pamięci podręcznej lub coś w tym rodzaju i chciałbym powstrzymać MySQL przed zrobieniem tego. Kiedy wprowadzam polecenie, chciałbym, aby MySQL uruchomił je natychmiast i nie wracał przed zakończeniem jego wykonania. Niektóre 500 000 operacji usuwania zakończyło się w ciągu 2 minut (w co nie do końca wierzę).

Rzeczywisty przykład:

mysql> UPDATE members  SET username = REPLACE(username, ' ', '');
Query OK, 0 rows affected (0.05 sec)
Rows matched: 24013  Changed: 0  Warnings: 0
mysql> SELECT * FROM members; 
(displays many usernames, still with whitespaces)
ASTT
źródło