Você pode remover a funcionalidade de incremento automático da chave primária dessa coluna e, sempre que atualizar essa coluna, execute uma consulta com antecedência que contará todas as linhas da tabela e, em seguida, execute um loop que itera através dessa contagem de linhas, inserindo cada valor no respectiva linha e, finalmente, execute uma consulta inserindo uma nova linha com o valor dessa coluna sendo a contagem total de linhas mais uma. Isso funcionará perfeitamente e é a solução mais absoluta para alguém tentando realizar o que você é. Aqui está um exemplo de código que você pode usar para a função:
$table_row_count = mysql_result(mysql_query("SELECT COUNT(`field_1`) FROM `table`"), 0);
$viewsrowsdata = mysql_query("
SELECT `rank`, `field1`, `field2`, `field3`, `field4`
FROM (SELECT (@rank:=@rank+1) as `rank`, `field1`, `field2`, `field3`, `field4`
FROM (SELECT * FROM `views`) a
CROSS JOIN (SELECT @rank:=0) b
ORDER BY rank ASC) c
");
while ($row = mysql_fetch_assoc($viewsrowsdata)) {
$data[] = $row;
}
foreach ($data as $row) {
$new_field_1 = (int)$row['rank'];
$old_field_1 = (int)$row['field1'];
mysql_query("UPDATE `table` SET `field_1` = $new_field_1 WHERE `field_1` = $old_field_1");
}
mysql_query("INSERT INTO `table` (`field1`, `field2`, `field3`, `field4`) VALUES ('$table_row_count' + 1, '$field_2_value', 'field_3_value', 'field_4_value')");
Aqui, criei uma matriz associativa que havia anexado a uma coluna de classificação com a consulta em uma consulta de seleção, que dava a cada linha um valor de classificação começando com 1. Depois, iterava pela matriz associativa.
Outra opção seria obter a contagem de linhas, executar uma consulta de seleção básica, obter a matriz associativa e iterá-la da mesma maneira, mas com uma variável adicionada que é atualizada a cada iteração. Isso é menos flexível, mas realizará a mesma coisa.
$table_row_count = mysql_result(mysql_query("SELECT COUNT(`field_1`) FROM `table`"), 0);
$viewsrowsdata = mysql_query("SELECT * FROM `table`");
$updated_key = 0;
while ($row = mysql_fetch_assoc($viewsrowsdata)) {
$data[] = $row;
}
foreach ($data as $row) {
$updated_key = $updated_key + 1;
mysql_query("UPDATE `table` SET `field_1` = '$updated_key' WHERE `field_1` = '$row['field_1']'");
}
mysql_query("INSERT INTO `table` (`field1`, `field2`, `field3`, `field4`) VALUES ('$table_row_count' + 1, '$field_2_value', 'field_3_value', 'field_4_value')");