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)
źródło