Hola
Para cambiar los valores en una tabla de mysql o cualquier ambiente como sql server, orcle, mysql, informix, etc. se utiliza la funcion update ya que el insert como su nombre lo dice es para crear un nuevo registro y si insertas un nuevo registro con la finalidad del update, rompes la integridad de tu base de datos ya que la informacion sera ambigua y no podras determinar cual es la buena y cual es la que es basura y mas si este valor se actualizar miles de veces en un dia imaginate tu base de datos tronaria como chinampina ya que creseria sin control.
A lo que entendi de tu codigo solo intentas actualizar tus registros para que los nombres de las categorias esten en mayusculas, y mas o menos podria quedar asi:
<?php
$result = mysql_query("select id, nombre, title from nombres");
while($row = mysql_fetch_array($result)) {
echo "<tr><td>".$row["id"]."</td>";
echo "<td>".$row["nombre"]."</td>";
$camba=cambio($row["nombre"]);
echo "<td>".$camba."</td><tr>";
$query = sprintf("SELECT id, nombre FROM categorias WHERE id=" .$row["id"] , mysql_real_escape_string(strtolower($row["nombre"])));
// Ejecutar Consulta
$result = mysql_query($query);
}
?>