Puede eliminar la funcionalidad de incremento automático de la clave primaria de esa columna, luego, cada vez que actualice esa columna, ejecute una consulta de antemano que contará todas las filas de la tabla, luego ejecute un bucle que recorre ese recuento de filas insertando cada valor en el fila respectiva, y finalmente ejecute una consulta insertando una nueva fila con el valor de esa columna como el recuento total de filas más uno. Esto funcionará perfectamente y es la solución más absoluta para alguien que intenta lograr lo que eres. Aquí hay un ejemplo de código que puede usar para la función:
$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')");
Aquí creé una matriz asociativa que había agregado en una columna de rango con la consulta dentro de una consulta de selección, que le dio a cada fila un valor de rango que comienza con 1. Luego recorrí la matriz asociativa.
Otra opción hubiera sido obtener el recuento de filas, ejecutar una consulta de selección básica, obtener la matriz asociativa e iterarla de la misma manera pero con una variable adicional que se actualiza a través de cada iteración. Esto es menos flexible pero logrará lo mismo.
$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')");