--source include/have_innodb.inc --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings CREATE TABLE t1 (f1 BIGINT) ENGINE = InnoDB; CREATE TEMPORARY TABLE t2 (f1 BIGINT); SET AUTOCOMMIT = 0; --echo ##### CREATE TEMPORARY TABLE COMMIT; INSERT INTO t1 SET f1 = 1; CREATE TEMPORARY TABLE t3 (f1 BIGINT); ROLLBACK; --echo # Attention: --echo # 1. CREATE TEMPORARY TABLE is not accompagnied by an implicit --echo # COMMIT like an ordinary CREATE TABLE. --echo # That's the reason why t1 is here empty. --echo # 2. The TEMPORARY TABLE is created though the transaction --echo # ends with ROLLBACK. SELECT * FROM t1; SHOW CREATE TABLE t3; DROP TEMPORARY TABLE t3; --echo ##### CREATE TEMPORARY TABLE with INDEX COMMIT; INSERT INTO t1 SET f1 = 1; CREATE TEMPORARY TABLE t3 (f1 BIGINT, UNIQUE INDEX(f1)); ROLLBACK; --echo # Attention: --echo # 1. CREATE TEMPORARY TABLE is not accompagnied by an implicit --echo # COMMIT like an ordinary CREATE TABLE. --echo # That's the reason why t1 is here empty. --echo # 2. The TEMPORARY TABLE is created though the transaction --echo # ends with ROLLBACK. SELECT * FROM t1; SHOW CREATE TABLE t3; DROP TEMPORARY TABLE t3; --echo ##### CREATE INDEX on TEMPORARY TABLE COMMIT; INSERT INTO t1 SET f1 = 1; CREATE INDEX idx ON t2(f1); ROLLBACK; --echo # Attention: --echo # CREATE INDEX on TEMPORARY TABLE is accompagnied by an implicit --echo # COMMIT like an CREATE INDEX ON . --echo # That's the reason why t1 is here not empty. SELECT * FROM t1; SHOW CREATE TABLE t2; DELETE FROM t1; --echo ##### DROP TEMPORARY TABLE COMMIT; INSERT INTO t1 SET f1 = 1; DROP TEMPORARY TABLE t2; ROLLBACK; --echo # Attention: --echo # 1. DROP TEMPORARY TABLE is not accompagnied by an implicit --echo # COMMIT like an ordinary DROP TABLE. --echo # That's the reason why we t1 is here empty. --echo # 2. The TEMPORARY TABLE is dropped though the transaction --echo # ends with ROLLBACK. SELECT * FROM t1; --error ER_NO_SUCH_TABLE SHOW CREATE TABLE t2; # Cleanup DROP TABLE t1;