Jeśli mój stolik był InnoDB, (patrząc od SHOW CREATE TABLE xxx
) i moja transakcja nie cofnął się, co byś zasugerował?
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
To część testach jednostkowych: Mam skonfigurować metodę, która uruchamia transation:
protected function setUp()
{
global $db;
$db->beginTransaction();
// Insert this tested object into db.
}
i sposób zburzyć, które powinny zapewnić, że rząd nie jest włożona do dB (każdy czas, w którym test jest uruchamiany w tej klasie testowej, wykonuje parę setUp/tearDown, więc nie chcę duplikatów, które wypełniają moją tabelę db).
protected function tearDown()
{
global $db;
$db->rollBack();
}
Sprawdziłem co SQL jest wykonywany, a widzę, że AUTOCOMMIT jest ustawiona na false, gdy transakcja jest uruchamiany i przełącza się prawdą po wycofaniu, ale rząd pozostaje włożona.
Czy Twój DB jest przez przypadek MySQL przy użyciu tabel MyISAM? Nie obsługują transakcji. Jeśli chcesz obsługi transakcji, musisz użyć tabel InnoDB. – nos
Tak, używam tabel MyISAM. Zmieniłem tabele InnoDB i to działa. Dzięki. – Billy