Nếu bàn của tôi là InnoDB, (nhìn thấy từ SHOW CREATE TABLE xxx
) và giao dịch của tôi đã không quay trở lại, bạn sẽ gợi ý điều gì?
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
Đó là một phần của đơn vị xét nghiệm: Tôi có một phương pháp thiết lập bắt đầu một transation:
protected function setUp()
{
global $db;
$db->beginTransaction();
// Insert this tested object into db.
}
và một phương pháp xé xuống mà cần đảm bảo rằng hàng không đưa vào db (mỗi thời gian thử nghiệm được chạy trong lớp thử nghiệm này, nó thực thi cặp setUp/tearDown và vì vậy tôi không muốn các bản sao lấp đầy bảng db của tôi).
protected function tearDown()
{
global $db;
$db->rollBack();
}
Tôi đã kiểm tra những gì SQL được thực thi, và tôi có thể nhìn thấy autocommit được thiết lập là false khi giao dịch được bắt đầu, và chuyển sang đúng sau khi lăn trở lại, nhưng hàng vẫn chèn vào.
Nguồn
2009-10-25 10:08:04
DB của bạn có phải là cơ hội bằng cách sử dụng bảng MyISAM không? Họ không hỗ trợ giao dịch. Bạn sẽ phải sử dụng các bảng InnoDB nếu bạn muốn hỗ trợ giao dịch. – nos
Có, tôi đang sử dụng các bảng MyISAM. Tôi đã thay đổi thành các bảng InnoDB và nó hoạt động. Cảm ơn. – Billy