这个问题答案很简单,很多人也都清楚,但直接说答案没意义,也不便于理解。我们用简单的案例来演示
1、新建表,占用200M
mysql> create table test as select @id:=@id+1 as id,e.* from emp e ,t100 a,t100 b,t100 c;
Query OK, 2875306 rows affected (30.62 sec)
Records: 2875306 Duplicates: 0 Warnings: 0
mysql> system ls /data/mysql/user_3306/data/test/test.* -lh
-rw-rw----. 1 mysql mysql 8.6K 2月 5 07:50 /data/mysql/user_3306/data/test/test.frm
-rw-rw----. 1 mysql mysql 212M 2月 5 07:50 /data/mysql/user_3306/data/test/test.ibd
2、删除数据,空间不会释放
mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
| 2875306 |
+----------+
1 row in set (6.87 sec)
mysql> delete from test limit 2875300;
Query OK, 2875300 rows affected, 1 warning (39.77 sec)
mysql> system ls /data/mysql/user_3306/data/test/test.* -lh
-rw-rw----. 1 mysql mysql 8.6K 2月 5 07:50 /data/mysql/user_3306/data/test/test.frm
-rw-rw----. 1 mysql mysql 212M 2月 5 07:53 /data/mysql/user_3306/data/test/test.ibd
3、insert数据,可以看到重用了空间
mysql> insert into test select @id:=@id+1 as id,e.* from emp e ,t100 a,t100 b,t100 c;
Query OK, 2875306 rows affected (51.26 sec)
Records: 2875306 Duplicates: 0 Warnings: 0
mysql> system ls /data/mysql/user_3306/data/test/test.* -lh
-rw-rw----. 1 mysql mysql 8.6K 2月 5 07:50 /data/mysql/user_3306/data/test/test.frm
-rw-rw----. 1 mysql mysql 224M 2月 5 07:54 /data/mysql/user_3306/data/test/test.ibd
以上实验,非自动提交模式下注意要用commit来提交结果