The mysql documentation states that certain statements will cause an implicit commit during a transaction. For example:
CREATE TABLE foo (bar INT);
START TRANSACTION;
INSERT INTO foo VALUES (1);
CREATE TEMPORARY TABLE mumble like foo;
ALTER TABLE mumble modify bar INT UNSIGNED;
ROLLBACK;
SELECT * FROM foo;
after the rollback, I get a single row back from foo -- the documentation actually says that an alter table shouldn't cause an implicit commit if you use the temporary keyword, but ALTER TEMPORARY TABLE is not valid syntax, and dropping a temporary table doesn't cause an implicit commit, so I suspect there's just a bug (at least as of 5.5.29)
In any case, what I'd like to do is to tell mysql to never implicitly commit, but instead to fail / rollback if a command is given which would cause an implicit commit.
I suspect there is no way to do this, having looked around a fair bit, but I'm hoping I'm wrong. Hopefully someone on here knows :)