MySQL語句之刪除指令deleted和truncate在使用中的異同詳解
刪除指令deleted和truncate在使用中的異同
在MySQL中,DELETE
和 TRUNCATE
是兩種不同的數(shù)據(jù)操作命令,雖然都能起到刪除數(shù)據(jù)的作用,但是功能和影響均有所不同。
理論
1.功能
DELETE
用于從表中刪除特定的行,通常基于特定的條件。TRUNCATE
用于刪除表中的所有數(shù)據(jù),但保留表的結(jié)構(gòu)。
2.事務(wù)性
DELETE
是DML(數(shù)據(jù)操縱語言)命令,因此可以在事務(wù)中使用,并且可以通過ROLLBACK
撤消刪除操作。TRUNCATE
是DDL(數(shù)據(jù)定義語言)命令,不能在事務(wù)中使用,也無法通過ROLLBACK
撤消刪除操作。
3.性能
- 刪除大量數(shù)據(jù)時(shí)可能較慢,特別是如果表有索引,刪除過程可能需要更新索引,因此相對(duì)較慢。
TRUNCATE
的性能通常比DELETE
更好,特別是在刪除大量數(shù)據(jù)時(shí),因?yàn)樗挥涗泟h除的每一行,而是直接釋放存儲(chǔ)空間。
4.影響
DELETE
僅刪除滿足條件的行,不影響表的結(jié)構(gòu)。但是,它會(huì)記錄刪除的每一行,因此可能會(huì)增加事務(wù)日志的大小。TRUNCATE
刪除表中的所有行,但是保留表的結(jié)構(gòu),包括索引、約束等。它將表的自增長計(jì)數(shù)器重置為初始值。
5.總結(jié)
DELETE
是DML命令,適合用于刪除特定行,支持條件刪除,并且可以在事務(wù)中使用,但是它比較慢且增加了事務(wù)日志的大小。TRUNCATE
是DDL命令,用于刪除表中的所有數(shù)據(jù),性能通常比DELETE
更好,但是無法撤銷操作,且會(huì)重置自增長計(jì)數(shù)器。
舉個(gè)例子
假設(shè)有一個(gè)名為 employees
的表,其中包含員工的信息,包括 id
、name
和 salary
。
現(xiàn)在需要?jiǎng)h除這個(gè)表內(nèi)的數(shù)據(jù),并比較使用 DELETE
和 TRUNCATE
的效果。
1.使用 DELETE
-- 刪除表中薪資低于 3000 的員工記錄 DELETE FROM employees WHERE salary < 3000;
在這種情況下,DELETE
將刪除所有薪資低于 3000 的員工記錄。
如果表中有許多匹配的行,則 DELETE
將逐行刪除這些行。
這可能需要一些時(shí)間,特別是如果表很大。
2. 使用 TRUNCATE
-- 清空整個(gè)表 TRUNCATE TABLE employees;
TRUNCATE
將清空整個(gè)表,即刪除表中的所有行,但保留表的結(jié)構(gòu)。
在執(zhí)行 TRUNCATE
后,表中的自增長計(jì)數(shù)器將重置為初始值,而且不會(huì)觸發(fā)觸發(fā)器。
3. 對(duì)比
使用 DELETE
時(shí),我們可以根據(jù)條件選擇性地刪除行,而 TRUNCATE
則是將整個(gè)表清空。
DELETE
是 DML 操作,可以在事務(wù)中使用,可以撤消,但可能比較慢。
TRUNCATE
是 DDL 操作,不可回滾,性能通常比 DELETE
更好。
因此,如果需要精確控制刪除的行或者需要保留表的結(jié)構(gòu),可以使用 DELETE
。
如果只是需要快速清空整個(gè)表而不關(guān)心數(shù)據(jù)內(nèi)容,可以考慮使用 TRUNCATE
。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Mysql數(shù)據(jù)庫如何使用DELETE語句從數(shù)據(jù)庫表中刪除數(shù)據(jù)(數(shù)據(jù)庫數(shù)據(jù)刪除)
- 解析MySQL中DELETE語句中別名的使用
- MySQL中UPDATE與DELETE語句的使用教程
- mysql delete limit 使用方法詳解
- ORACLE SQL-UPDATE、DELETE、INSERT優(yōu)化和使用技巧分享
- sqlserver中delete、update中使用表別名和oracle的區(qū)別
- MySQL DELETE語法使用詳細(xì)解析
- MySQL刪除數(shù)據(jù)Delete與Truncate語句使用比較
- SQL?Delete使用示例詳解
相關(guān)文章
IOS 數(shù)據(jù)庫升級(jí)數(shù)據(jù)遷移的實(shí)例詳解
這篇文章主要介紹了IOS 數(shù)據(jù)庫升級(jí)數(shù)據(jù)遷移的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家解決數(shù)據(jù)庫升級(jí)及數(shù)據(jù)遷移的問題,需要的朋友可以參考下2017-07-07MySQL的鎖機(jī)制之全局鎖和表鎖的實(shí)現(xiàn)
本文主要介紹了MySQL的鎖機(jī)制之全局鎖和表鎖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01MySQL?分區(qū)表中分區(qū)鍵為什么必須是主鍵的一部分
這篇文章主要介紹了MySQL?分區(qū)表中分區(qū)鍵為什么必須是主鍵的一部分,分區(qū)是一種表的設(shè)計(jì)模式,通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個(gè)小表,更多相關(guān)資料需要的小伙伴可以參考下面文章內(nèi)容2022-03-03MySQL數(shù)據(jù)庫表的合并與分區(qū)實(shí)現(xiàn)介紹
今天我們來聊聊處理大數(shù)據(jù)時(shí)Mysql的存儲(chǔ)優(yōu)化。當(dāng)數(shù)據(jù)達(dá)到一定量時(shí),一般的存儲(chǔ)方式就無法解決高并發(fā)問題了。最直接的MySQL優(yōu)化就是分區(qū)分表,以下是我個(gè)人對(duì)分區(qū)分表的筆記2022-09-09Mysql使用索引實(shí)現(xiàn)查詢優(yōu)化
索引的目的在于提高查詢效率,本文給大家介紹Mysql使用索引實(shí)現(xiàn)查詢優(yōu)化技巧,涉及到索引的優(yōu)點(diǎn)等方面的知識(shí)點(diǎn),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-07-07MySQL跨服務(wù)器關(guān)聯(lián)查詢的實(shí)現(xiàn)
本文主要介紹了MySQL跨服務(wù)器關(guān)聯(lián)查詢的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01