Estou limpando muitos dos meus DB's / Tables, e tenho me deparado com um problema. Quando executo a maioria dos comandos que alteram dados em uma tabela (ou seja, DELETE FROM ou UPDATE), o comando retorna como concluído, mas na verdade não faz nada.
ou seja
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).
Isso não deveria estar acontecendo, quando eu executo um comando delete eu espero que ele realmente apague as linhas. No entanto, e aqui está a parte estranha, se eu ficar logado por um tempo as linhas acabarão por ser apagadas. Se eu sair imediatamente, as linhas não serão deletadas.
Este não é o código exato que estou executando (trabalhando com muito mais condições / DBs maiores), mas o conceito é exatamente o mesmo. Eu também estou verificando as exclusões usando o adminer.php (um gerenciador MySQL do tipo php 1, como o phpmyadmin), e isso leva cerca de uma hora para que quaisquer exclusões / atualizações sejam registradas.
Eu suponho que os comandos estão sendo enfileirados ou armazenados em cache ou algo assim, e eu gostaria de parar o MySQL de fazer isso. Quando eu insiro um comando, eu gostaria que o MySQL executasse esse comando imediatamente, e não retornasse antes de terminar de executar o comando. Algumas exclusões de 500K terminaram em 2 minutos (o que não consigo acreditar).
Exemplo real:
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)
Tags command-line mysql php linux