Не думаю, что с вашим кодом что-то не так. Вот именно этот код на MySQL Ver 14.14 Distrib 5.1.44 на Mac, показывающий ожидаемый результат:
mysql> create table test (i integer) Engine = InnoDB;
Query OK, 0 rows affected (0.10 sec)
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test(i) values(10);
Query OK, 1 row affected (0.01 sec)
mysql> insert into test(i) values(20);
Query OK, 1 row affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.01 sec)
mysql>
Какую версию MySQL вы используете? Какая платформа? Как вы вводите эти команды? Возможно, вы вводите каждую отдельную команду, например, в новом соединении? Это может объяснить поведение.