Some commands are intrinsically impossible to undo; issuing them causes an immediate and permanent change to the database. In MySQL, these commands are:
ALTER TABLE
BEGIN
CREATE INDEX
DROP DATABASE
DROP TABLE
LOCK TABLES
RENAME TABLE
TRUNCATE
Issuing these commands in transactional mode immediately terminates the current transaction as if a COMMIT command has been issued. (Note, in particular, the presence in the list of BEGIN; it is not possible to "nest" transactions in MySQL.) Users of other databases will find similar restrictions and should consult their database documentation for details.