在sql中delete和truncate命令都可用于刪除數據(記錄),那么它們之間有什么區別?下面本篇文章就來給大家介紹一下delete和truncate命令之間的區別,希望對大家有所幫助。
什么是delete命令?
delete命令有助于從數據庫中的表中刪除記錄。【視頻教程推薦:MySQL教程】
例:以下是一張student表,包含有3個字段:student_id、name、marks
可以使用SQL的delete命令來刪除student表中的所以記錄:
delete?from?student;
也可以刪除student表中的特定記錄:
delete?from?student?where?student_id?=2;
上面的SQL命令將刪除student_id為2的記錄。執行該語句后,表中將只包含兩條記錄:student_id為1和3的記錄。
什么是truncate命令?
truncate命令有助于從表中刪除所有記錄。它還從數據庫中刪除表結構。因此,在特定表上執行truncate命令時,它還會初始化主鍵。
以下SQL命令將刪除student表中的所有記錄。此外,它從數據庫中刪除表結構。
truncate?table?student;
delete和truncate命令之間的區別是什么?
1、命令類型
delete是數據操作語言(DML)命令;而truncate是數據定義語言(DDL)命令。
2、功能
delete命令根據指定的SQL語句從表中刪除單個,多個或所有記錄;而truncate命令從數據庫中刪除所有記錄和表結構。
3、Where子句
delete命令支持WHERE子句,可以使用帶有DELETE的where子句來過濾和刪除特定記錄;而,truncate命令不支持WHERE子句。
4、鎖定
delete命令采用行級鎖定,表中的每一行都被鎖定以進行刪除;truncate命令采用表級鎖定,鎖定了整個表以刪除所有記錄。
5、索引視圖
delete命令可以與索引視圖一起使用;而,truncate命令不能與索引視圖一起使用。
6、執行速度
由于delete命令維護日志,因此速度很慢。但是,由于truncate命令在事務日志中維護最少的日志記錄,因此執行速度更快。
7、表結構
delete命令不會影響表結構,而truncate命令會從數據庫中刪除表結構。
8、事務空間
delete命令比truncate命令使用更多的事務空間。