Fallo en transacciones SQL

Kaos

Estoy haciendo un scrip con una estructura del tipo:

mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");

Consultas, edits, deletes y updates.

Y si va mal:
mysql_query("ROLLBACK");

Y si va bien:
mysql_query("COMMIT");

mysql_query("SET AUTOCOMMIT=1");

La cuestión es que si va mal, hace cambios en las tablas. Todo está en Innodb.
Supuestamente el Rollback debería deshacer cambios pero no funciona...

Alguno sabéis a q se puede deber?

Hay un detalle importante y es q las tablas se trabajan de manera concurrente, aunq segun tengo entendido innodb bloquea a nivel de fila y no debería interferir unos usuarios con otros... no sé...

Soltrac

Empieza la transacción con BEGIN en vez de START TRANSACTION, tampoco creo q te hagan falta los SET.

Luego por supuesto comprueba la versión de MySQL, el soporte de transacciones entró creo en la 3.23.

Kaos

Begin es un alias de start transaction, eso no puede ser la causa me temo

MaKi

no he jugado demasiado con transacciones, solo he leido, aunque es algo que tengo pendiente pa estudiar mu seriamente, yo pienso que tu fallo es el siguiente:
Todo el string del query tienes que enviarlo en un solo query, si haces muchos querys ya no es una transacción, es como si distintos clientes realizaran muchos querys.
Entonces me diras, y como controlo el fallo si lo envio todo en un solo query ? pues según tengo entendido mysql provee de suficiente lógica procedimental como para el típico IF-ELSE ejecutando un query que deshace en caso de error, siempre todo en la misma cadena (solo 1 query). Google es tu amigo xD

Soltrac

#4 No debería ser eso, porque entonces las transacciones no tendrían sentido.

en el SHOW VARIABLES te sale el have_innodb a true verdad?

Usuarios habituales

  • Soltrac
  • MaKi
  • Kaos