MySQL清空數(shù)據(jù)表的方法實例與分析
MySQL數(shù)據(jù)庫中,如果我們想清空數(shù)據(jù)表(刪除數(shù)據(jù)表中所有內容)的話,可以通過下面兩個語句來實現(xiàn):
truncate table table_n; delete from table_n;
實例
我們先通過實例看下通過這兩種方式清空數(shù)據(jù)庫的過程和結果
#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)
以上是兩張同樣結構的數(shù)據(jù)表,下面我們先插入數(shù)據(jù),然后再分別用 delete
和 truncate
操作它們,看下結果如何
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)
從上面操作過程和結果不難看出,它們最大的區(qū)別就是delete
在不限定where
條件下清空表的話,不會重置auto_increment
的值,新插入的會隨著上次的值接著增加;而truncate
則不然,他會直接重置為1(其實這里它做的操作可以理解為直接刪除表結構和內容,然后按照表結構重建表)
那么除了上面能明顯看出來的區(qū)別之外,他們還存在以下幾點區(qū)別:
1、truncate
是整個清空的,而delete是逐行刪除的。相較而言,truncate
效率較高。
2、在事物處理方面,truncate
可能不會那么安全。因為 delete
語句是數(shù)據(jù)庫操作語言(dml),這個操作會放到 rollback segement
中,事務提交之后才生效;如果有相應的 trigger
,執(zhí)行的時候將被觸發(fā)。而 truncate
是數(shù)據(jù)庫定義語言(ddl),操作立即生效,原數(shù)據(jù)不放到 rollback segment
中,不能回滾,操作不觸發(fā) trigger
。
3、truncate
只能做清空表使用,而 delete
可以配合 where
,order by
,limit
等字句使用,所以在靈活方面,delete
完勝。
4、truncate
操作不會記錄到日志中,而delete
則是記錄的。
5、正是由于 truncate
操作不會記錄到日志中,所以它不會激活觸發(fā)器。所以對于由 foreign
約束引用的表,不能使用 truncate table
,而應使用不帶 where
子句的 delete
語句。
6、truncate
不能用于參與了索引視圖的表
總結
以上就是MySQL清空數(shù)據(jù)表的全部內容了,希望這篇文章的內容對大家的學習或者工作能有所幫助,如果有疑問大家可以留言交流。
相關文章
MySQL 5.7.9 服務無法啟動-“NET HELPMSG 3534”的解決方法
這篇文章主要介紹了MySQL 5.7.9 服務無法啟動-“NET HELPMSG 3534”的解決方法,需要的朋友可以參考下2016-12-12mysql數(shù)據(jù)庫操作_高手進階常用的sql命令語句大全
mysql數(shù)據(jù)庫操作sql命令語句大全:三表連表查詢、更新時批量替換字段部分字符、判斷某一張表是否存在、自動增長恢復從1開始、查詢重復記錄、更新時字段值等于原值加上一個字符串、更新某字段為隨機值、復制表數(shù)據(jù)到另一個表、創(chuàng)建表時拷貝其他表的數(shù)據(jù)和結構...2022-11-11結合PHP腳本添加和查詢MySQL數(shù)據(jù)的基本教程
這篇文章主要介紹了結合PHP腳本添加和查詢MySQL數(shù)據(jù)的基本教程,即在PHP程序中使用基本的SELECT FROM和INSERT INTO語句,需要的朋友可以參考下2015-12-12