MySQL清空資料表的方法例項與分析

2022-09-25 23:54:14 字數 3837 閱讀 1666

mysql資料庫中,如果我們想清空資料表(刪除資料表中所有內容)的話,可以通過下面兩個語句來實現:

truncate table table_n;

delete from table_n;

例項我們先通過例項看下通過這兩種方式清空資料庫的過程和結果

#delete演示

mysql> create table testforde(

-> number int not null auto_increment,

-> name varchar(20) not null,

-> primary key(number)

-> );

query ok, 0 rows affected (0.05 sec)

#truncate演示

mysql> create table testfortr(

-> number int not null auto_increment,

-> name varchar(20) not null,

-> primary key(number)

-> );

query ok, 0 rows affected (0.04 sec)

以上是兩張同樣結構的資料表,下面我們先插入資料,然後再分別用delete和truncate操作它們,看下結果如何

mysql> insert into testforde(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qi'),('hanba');

quer程式設計客棧y ok, 7 rows affected (0.04 sec)

records: 7 duplicates: 0 warnings: 0

mysql> insert into test values('zhagnsan'),('lisi'),('wanwww.cppcns.comger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');

query ok, 7 rows affected (0.00 sec)

records: 7 duplicates: 0 warnings: 0

mysql> select * from testforde;

+--------+----------+

| number | name |

+--------+----------+

| 1 | zhagnsan |

| 2 | lisi |

| 3 | wanger |

| 4 | zhaoliu |

| 5 | xiaosan |

| 6 | qiqi |

| 7 | hanba |

+---www.cppcns.com-----+----------+

7 rows in set (0.01 sec)

mysql> select * from testfortr;

+--------+----------+

| number | name |

+--------+----------+

| 1 | zhagnsan |

| 2 | lisi |

| 3 | wanger |

| 4 | zhaoliu |

| 5 | xiaosan |

| 6 | qiqi |

| 7 | hanba |

+--------+----------+

7 rows in set (0.00 sec)

mysql> delete from testforde;

query ok, 7 rows affected (0.02 sec)

mysql> truncate table testfortr;

query ok, 0 rows affected (0.02 sec)

mysql> insert into testforde(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');

query ok, 7 rows affected (0.00 sec)

records: 7 duplicates: 0 warnings: 0

mysql> insert into testfortr(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');

query ok, 7 rows affected (0.00 sec)

records: 7 duplicates: 0 warnings: 0

mysql> select * from testforde;

+--------+----------+

| number | name |

+--------+----------+

| 8 | zhagnsan |

| 9 | lisi |

| 10 | wanger |

| 11 | zhaoliu |

| 12 | xiaosan |

| 13 | qiqi |

| 14 | hanba |

+--------+----------+

7 rows in set (0.00 sec)

mysql> select * from testfortr;

+--------+----------+

| number | name |

+--------+----------+

| 1 | zhagnsan |

| 2 | lisi |

| 3 | wanger |

| 4 | zhaoliu |

| 5 | xiaosan |

| 6 | qiqi |

| 7 | hanba |

+--------+----------+

7 rows in set (0.00 sec)

從上面操作過程和結果不難看出,它們最大的區別就是delete在不限定where條件下清空表的話,不會重置auto_increment的值,新插入的會隨著上次的值接著增加;而truncate則不然,他會直接重置為1(其實這裡它做的操作可以理解為直接刪除表結構和內容,然後按照表結構重建表)

那麼除了上面能明顯看出來的區別之外,他們還存在以下幾點區別:

1、truncate是整個清空的,而delete是逐行刪除的。相較而言,truncate效率較高。

2、在事物處理方面,truncate可能不會那麼安全。因為delete語句是資料庫操作語言(dml),這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發。而truncate是資料庫定義語言(ddl),操作立即生效,原資料不放到rollback segment中,不能回滾,操作不觸發trigger。

3、truncate只能做清空表使用,而delete可以配合where,order by,limit等字句使用,所以在靈活方面,delete完勝。

4、truncate操作不會記錄到日誌中,而delete則是記錄的。

5、正是由於truncate操作不會記錄到日誌中,所以它不會啟用觸發器。所以對於由foreign約束引用的表,不能使用truncate table,而應使用不帶where子句的delete語句。

6、truncate不能用於參與了索引檢視的表

總結本文標題: mysql清空資料表的方法例項與分析

本文位址:

mysql清空資料表的兩種方法對比

truncate table test table truncate是整體刪除 速度較快 此命令刪除表不寫日誌,不啟用觸發器,但是會重置標識列 自增字段 delete from test table delete 清空表,是逐條刪除,會寫日誌到伺服器,常用場景 刪除部分記錄,結合where條件刪除表...

mysql清空表的方法

清空某個mysql表中所有內容可以有下面兩種方法實現 1.delete from 表名 2.truncate table 表名 不帶where引數的delete語句可以刪除mysql表中所有內容,使用truncate table也可以清空mysql表中所有內容。效率上truncate比delete快...

Oracle清空資料庫中資料表資料的方法

最近在專案發版測試的時候,匯出dmp的時候不小心把開發庫中的一些髒資料匯出來了,測試那邊匯入進去之後一堆不規範的資料,為了不影響測試結果,於是總結了乙個快速清空資料庫資料表所有資料的方法。1 第一種方法 分步驟實現 a 第一步 禁止所有的外來鍵約束.開啟plsql 新建乙個查詢視窗,輸入 selec...