insert時能否重用delete後的空間

2021-06-28 15:30:09 字數 1659 閱讀 3261

這個問題答案很簡單,很多人也都清楚,但直接說答案沒意義,也不便於理解。我們用簡單的案例來演示

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來提交結果

在MySQL中insert時生成UUID

在mysql中,可以用uuid 函式來生成乙個uuid,如下圖 預設生成的uuid含有 我們可以使用replace函式替換掉 sql如下 select replace uuid as uuid 結果如下 如果乙個表中id欄位使用uuid來作為主鍵,那我們可以使用下面的語句來插入資料 insert i...

insert時出現主鍵衝突的處理方法

使用 insert into 語句進行資料庫操作時可能遇到主鍵衝突,使用者需要根據應用場景進行忽略或者覆蓋等操作。總結下,有三種解決方案來避免出錯。測試表 create table device devid mediumint 8 unsigned not null auto increment,s...

insert時判斷資料庫中是否存在

在做使用者模組或其他模組要求資料庫唯一性的時候在插入資料需要先判斷一下資料庫中是否已經存在 直接看案例 這條sql 最基礎的插入語句,insert into user name,password values admin,123456 下面將它改造成插入判斷是否存在 insert into user...