MySQL清空數(shù)據(jù)表的方法實(shí)例與分析
MySQL數(shù)據(jù)庫(kù)中,如果我們想清空數(shù)據(jù)表(刪除數(shù)據(jù)表中所有內(nèi)容)的話,可以通過(guò)下面兩個(gè)語(yǔ)句來(lái)實(shí)現(xiàn):
truncate table table_n; delete from table_n;
實(shí)例
我們先通過(guò)實(shí)例看下通過(guò)這兩種方式清空數(shù)據(jù)庫(kù)的過(guò)程和結(jié)果
#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)
以上是兩張同樣結(jié)構(gòu)的數(shù)據(jù)表,下面我們先插入數(shù)據(jù),然后再分別用 delete 和 truncate 操作它們,看下結(jié)果如何
mysql> insert into testforde(name) values('zhagnsan'),('lisi'),('wanger'),('zhaoliu'),('xiaosan'),('qiqi'),('hanba');
Query OK, 7 rows affected (0.04 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 |
+--------+----------+
| 1 | zhagnsan |
| 2 | lisi |
| 3 | wanger |
| 4 | zhaoliu |
| 5 | xiaosan |
| 6 | qiqi |
| 7 | hanba |
+--------+----------+
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)
從上面操作過(guò)程和結(jié)果不難看出,它們最大的區(qū)別就是delete在不限定where條件下清空表的話,不會(huì)重置auto_increment的值,新插入的會(huì)隨著上次的值接著增加;而truncate則不然,他會(huì)直接重置為1(其實(shí)這里它做的操作可以理解為直接刪除表結(jié)構(gòu)和內(nèi)容,然后按照表結(jié)構(gòu)重建表)
那么除了上面能明顯看出來(lái)的區(qū)別之外,他們還存在以下幾點(diǎn)區(qū)別:
1、truncate是整個(gè)清空的,而delete是逐行刪除的。相較而言,truncate效率較高。
2、在事物處理方面,truncate 可能不會(huì)那么安全。因?yàn)?delete 語(yǔ)句是數(shù)據(jù)庫(kù)操作語(yǔ)言(dml),這個(gè)操作會(huì)放到 rollback segement 中,事務(wù)提交之后才生效;如果有相應(yīng)的 trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā)。而 truncate 是數(shù)據(jù)庫(kù)定義語(yǔ)言(ddl),操作立即生效,原數(shù)據(jù)不放到 rollback segment 中,不能回滾,操作不觸發(fā) trigger。
3、truncate 只能做清空表使用,而 delete 可以配合 where,order by,limit 等字句使用,所以在靈活方面,delete完勝。
4、truncate操作不會(huì)記錄到日志中,而delete則是記錄的。
5、正是由于 truncate 操作不會(huì)記錄到日志中,所以它不會(huì)激活觸發(fā)器。所以對(duì)于由 foreign 約束引用的表,不能使用 truncate table,而應(yīng)使用不帶 where 子句的 delete 語(yǔ)句。
6、truncate 不能用于參與了索引視圖的表
總結(jié)
以上就是MySQL清空數(shù)據(jù)表的全部?jī)?nèi)容了,希望這篇文章的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能有所幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
MySql 8.0及對(duì)應(yīng)驅(qū)動(dòng)包匹配的注意點(diǎn)說(shuō)明
這篇文章主要介紹了MySql 8.0及對(duì)應(yīng)驅(qū)動(dòng)包匹配的注意點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
mysql同步問(wèn)題之Slave延遲很大優(yōu)化方法
這篇文章主要介紹了mysql同步問(wèn)題之Slave延遲很大優(yōu)化方法,需要的朋友可以參考下2016-05-05
MySQL 5.7.9 服務(wù)無(wú)法啟動(dòng)-“NET HELPMSG 3534”的解決方法
這篇文章主要介紹了MySQL 5.7.9 服務(wù)無(wú)法啟動(dòng)-“NET HELPMSG 3534”的解決方法,需要的朋友可以參考下2016-12-12
mysql數(shù)據(jù)庫(kù)操作_高手進(jìn)階常用的sql命令語(yǔ)句大全
mysql數(shù)據(jù)庫(kù)操作sql命令語(yǔ)句大全:三表連表查詢、更新時(shí)批量替換字段部分字符、判斷某一張表是否存在、自動(dòng)增長(zhǎng)恢復(fù)從1開(kāi)始、查詢重復(fù)記錄、更新時(shí)字段值等于原值加上一個(gè)字符串、更新某字段為隨機(jī)值、復(fù)制表數(shù)據(jù)到另一個(gè)表、創(chuàng)建表時(shí)拷貝其他表的數(shù)據(jù)和結(jié)構(gòu)...2022-11-11
mysql實(shí)現(xiàn)不用密碼登錄的實(shí)例方法
在本篇文章里小編給大家整理的是一篇關(guān)于mysql實(shí)現(xiàn)不用密碼登錄的實(shí)例方法,有需要的朋友們可以學(xué)習(xí)參考下。2020-08-08
結(jié)合PHP腳本添加和查詢MySQL數(shù)據(jù)的基本教程
這篇文章主要介紹了結(jié)合PHP腳本添加和查詢MySQL數(shù)據(jù)的基本教程,即在PHP程序中使用基本的SELECT FROM和INSERT INTO語(yǔ)句,需要的朋友可以參考下2015-12-12
初探SQL語(yǔ)句復(fù)合主鍵與聯(lián)合主鍵
這篇文章主要介紹了初探SQL語(yǔ)句復(fù)合主鍵與聯(lián)合主鍵的相關(guān)內(nèi)容,具有一定參考價(jià)值,這里給大家分享下,需要的朋友可以參考。2017-10-10

