Lo que quiero hacer es insertar en 2 tablas una serie de informacion relacionada por un campo que es clave primaria de la segunda tabla, este campo es id_tag que es un autoincrement. Inserto en la segunda tabla los datos y recupero el id_tag, ahora inserto en la primera tabla los datos correspondientes asi como su id_tag (Foreing Key), y si no se ha insertado bien lo que quiero hacer es borrar los datos insertados en la segunda tabla correspondientes al id_tag obtenido al comienzo (basicamente o inserto en las 2 tablas o sino no inserto en ninguna). Mi pregunta es donde coloco los cerrojos hacedme y si es posible decidme el porque? Os pongo el esquema a continuacion, de tal y como lo tengo, y me funciona correctamente:
Código PHP:
//...Mas codigo antes ...
mysql_query('LOCK TABLES '.$tabla_tag.' WRITE');
mysql_query('SET AUTOCOMMIT = 0');
mysql_query($query,$link) or die('No se pudo insertar los datos en la base de datos.'); //Insertamos el tag_info
$result2=mysql_query('SELECT LAST_INSERT_ID()');
$row=mysql_fetch_row($result2);
$id=$row[0];
mysql_free_result($result2);
mysql_query('COMMIT');
mysql_query('UNLOCK TABLES');
//Ahora con el $id que hemos obtenido hacemos una insercion en la tabla cancion
mysql_query('LOCK TABLES '.$tabla_can.' WRITE');
mysql_query('SET AUTOCOMMIT = 0');
$query = 'INSERT INTO '.$tabla_can.' (filepath,filename,id_tag) VALUES(\''.mysql_real_escape_string($matriz[$f]['filepath']).'\',\''.mysql_real_escape_string($matriz[$f]['filename']).'\','.$id.')';
if(!mysql_query($query,$link)){//Si no se pudo insertar la segunda tabla con exito borramos la primera tabla
mysql_query('DELETE FROM '.$tabla_tag.' WHERE '.mysql_field_name($result,0).'='.$id,$link) or die ('Error en la base de datos. No se pudo insertar ni borrar nada.');
}
mysql_query('COMMIT');
mysql_query('UNLOCK TABLES');
//...Mas codigo por abajo ...
Algun manual interesante e instructivo sobre cerrojos en MySQL a parte del manual de referencia de MySQL 5.0??
Gracias por la ayuda, a ver si me aclaro algo
