Si mi mesa era InnoDB, (visto de SHOW CREATE TABLE xxx
) y mi transacción no retrocedía, ¿qué sugieres?
CREATE TABLE `EarningCode` (
`ID` int(11) NOT NULL auto_increment,
`EarningCode` varchar(16) collate utf8_unicode_ci NOT NULL,
`Description` varchar(255) collate utf8_unicode_ci NOT NULL,
`DateEffective` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`Rate` float NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1239 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Es parte de las pruebas unitarias: Tengo un método establecido que inicia una transation:
protected function setUp()
{
global $db;
$db->beginTransaction();
// Insert this tested object into db.
}
y un método de desmontaje que debe asegurarse de que la fila no se inserta en la base de datos (cada uno una vez que se ejecuta una prueba en esta clase de prueba, ejecuta el par setUp/tearDown y, por lo tanto, no quiero duplicados que llenen mi tabla db).
protected function tearDown()
{
global $db;
$db->rollBack();
}
He comprobado lo que SQL se ejecuta, y puedo ver que el compromiso automático se establece en false cuando se inicia la transacción, y cambió a cierto después de retroceder, pero permanece inserta la fila.
¿Su DB es por casualidad MySQL usando tablas MyISAM? No admiten transacciones. Tendría que usar tablas InnoDB si desea soporte de transacciones. – nos
Sí, estoy usando tablas MyISAM. He cambiado a tablas InnoDB y funciona. Gracias. – Billy