這個問題答案很簡單,很多人也都清楚,但直接說答案沒意義,也不便於理解。我們用簡單的案例來演示
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來提交結果