Я не вижу, чтобы условие 'where' изменялось в цикле. Каждый раз, когда вы делаете «ГДЕ столбец =« что-то »», он будет совпадать и заменять ВСЕ строки, перезаписывая идентификатор каждого предыдущего обновления.
UPDATE:
Некоторые из нас написали похожие ответы одновременно. Я должен был нажать «обновить» еще раз, прежде чем «добавить»
Для чего стоит, если это одноразовое исправление для получения последовательных идентификаторов на столе, вы можете сделать это с помощью простого mysql:
mysql> select * from foo;
+------+------+
| id | name |
+------+------+
| 0 | aaa |
| 0 | bbb |
| 0 | ccc |
| 0 | ddd |
+------+------+
4 rows in set (0.00 sec)
mysql> set @ct=0;
Query OK, 0 rows affected (0.00 sec)
mysql> update foo set id=(@ct:=@ct+1);
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> select * from foo;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
+------+------+
4 rows in set (0.00 sec)
Используйте 'order by', если хотите, например:
mysql> update foo set id=(@ct:=@ct+1) order by name