DDL statements within transactions issue implicit COMMIT s:
drop table if exists t;
create table t(i int primary key auto_increment, j int);
insert into t (j) values(0);
select * from t;
+---+------+
| i | j |
+---+------+
| 1 | 0 |
+---+------+
-- client 1 drops, recreates & inserts, but does not commit
begin work;
drop table if exists t;
create table t(i int primary key auto_increment, j int);
insert into t (j) values(1);
select * from t;
+---+------+
| i | j |
+---+------+
| 1 | 1 |
+---+------+
-- client 2 can see result of client 1's changes even though
-- client 1 has not explicitly committed them:
select * from t;
+---+------+
| i | j |
+---+------+
| 1 | 1 |
+---+------+
Ditto for TRUNCATE , which MySQL implements as DROP then CREATE . |
|