一、用法不同
1、drop(丟棄數據): drop table 表名 ,直接將表都刪除掉,在刪除表的時候使用。
2、truncate (清空數據) : truncate table 表名 ,只刪除表中的數據,再插入數據的時候自增長 id 又從 1 開始,在清空表中數據的時候使用。
3、delete(刪除數據) : delete from 表名 where 列名=值,刪除某一行的數據,如果不加 where 子句和truncate table 表名作用類似。
truncate 和不帶 where 子句的 delete、以及 drop 都會刪除表內的數據,但是 truncate 和 delete 只刪除數據不刪除表的結構(定義),執行 drop 語句,此表的結構也會刪除,也就是執行 drop 之后對應的表不復存在。
二、屬于不同的數據庫語言
truncate 和 drop 屬于 DDL(數據定義語言)語句,操作立即生效,原數據不放到 rollback segment 中,不能回滾,操作不觸發 trigger。而 delete 語句是 DML (數據庫操作語言)語句,這個操作會放到 rollback segement 中,事務提交之后才生效。
DML 語句和 DDL 語句區別:
(1)DML 是數據庫操作語言(Data Manipulation Language)的縮寫,是指對數據庫中表記錄的操作,主要包括表記錄的插入(insert)、更新(update)、刪除(delete)和查詢(select),是開發人員日常使用最頻繁的操作。
(2)DDL (Data Definition Language)是數據定義語言的縮寫,簡單來說,就是對數據庫內部的對象進行創建、刪除、修改的操作語言。它和 DML 語言的最大區別是DML 只是對表內部數據的操作,而不涉及到表的定義、結構的修改,更不會涉及到其他對象。DDL語句更多的被數據庫管理員(DBA)所使用,一般的開發人員很少使用。
補充:由于select不會對表進行破壞,所以有的地方也會把select單獨區分開叫做數據庫查詢語言DQL(Data Query Language)
三、執行速度不同
一般來說:drop > truncate > delete。
1、delete命令執行的時候會產生數據庫的binlog日志,而日志記錄是需要消耗時間的,但是也有個好處方便數據回滾恢復。
2、truncate命令執行的時候不會產生數據庫日志,因此比delete要快。除此之外,還會把表的自增值重置和索引恢復到初始大小等。
3、drop命令會把表占用的空間全部釋放掉。