日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Truncate、Delete和Drop的六大區(qū)別!你知道幾個(gè)?

truncate、delete、drop區(qū)別概述

它們 3 個(gè)的區(qū)別如下表所示:

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、來(lái)安網(wǎng)站維護(hù)、網(wǎng)站推廣。

區(qū)別點(diǎn)

drop

truncate

delete

執(zhí)行速度

較快

命令分類

DDL(數(shù)據(jù)定義語(yǔ)言)

DDL(數(shù)據(jù)定義語(yǔ)言)

DML(數(shù)據(jù)操作語(yǔ)言)

刪除對(duì)象

刪除整張表和表結(jié)構(gòu),以及表的索引、約束和觸發(fā)器。

只刪除表數(shù)據(jù),表的結(jié)構(gòu)、索引、約束等會(huì)被保留。

只刪除表的全部或部分?jǐn)?shù)據(jù),表結(jié)構(gòu)、索引、約束等會(huì)被保留。

刪除條件(where)

不能用

不能用

可使用

回滾

不可回滾

不可回滾

可回滾

自增初始值

-

重置

不重置

接下來(lái)我們用案例來(lái)演示一下它們的區(qū)別。

準(zhǔn)備工作

正式開始之前,我們先來(lái)創(chuàng)建一個(gè)用戶表和用戶測(cè)試數(shù)據(jù),方便后續(xù)演示使用:

CREATE TABLE `userinfo` (
`id` int(11) NOT NULL AUTO_INCREMENT comment '編號(hào)',
`name` varchar(250) NOT NULL comment '姓名' unique,
`balance` decimal(10,2) NOT NULL DEFAULT '0.00' comment '賬戶余額',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert into userinfo values(1,'張三',1000),(2,'李四',500),(3,'王五',2000),(4,'李六',500);

創(chuàng)建的表結(jié)構(gòu)和數(shù)據(jù)如下圖所示:

1.刪除對(duì)象不同

delete 和 truncate 只刪除表數(shù)據(jù),不刪除表結(jié)構(gòu),其中 delete 刪除之后的結(jié)果如下:

我們先將表還原到初始狀態(tài),再使用 truncate 執(zhí)行刪除操作,執(zhí)行結(jié)果如下圖所示:

把表還原到初始狀態(tài),執(zhí)行 drop 刪除語(yǔ)句,執(zhí)行結(jié)果如下圖所示:

從上述結(jié)果可以看出,delete 和 truncate 只刪除表數(shù)據(jù),而 drop 把表結(jié)構(gòu)和表數(shù)據(jù)都刪除了。

2.刪除條件支持不同

truncate 和 drop 不支持添加 where 條件,而 delete 支持 where 條件,如下圖所示:

3.命令分類不同

truncate、delete 和 drop 所屬 SQL 分類不同,SQL 分為以下 3 類:

  • DDL【DataDefinitionLanguage】數(shù)據(jù)定義語(yǔ)言,用來(lái)維護(hù)存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)代表指令: create、drop、alter、truncate。
  • DML【DataManipulationLanguage】數(shù)據(jù)操縱語(yǔ)言,用來(lái)對(duì)數(shù)據(jù)進(jìn)行操作代表指令:insert,delete,update,DML 中又單獨(dú)分了一個(gè) DQL,數(shù)據(jù)查詢語(yǔ)言,代表指令是 select。
  • DCL【DataControlLanguage】數(shù)據(jù)控制語(yǔ)言,主要負(fù)責(zé)權(quán)限管理和事務(wù)代表指令:grant,revoke,commit。

其中 delete 屬于 DML,而 truncate 和 drop 屬于 DDL。

PS:truncate 是先復(fù)制一個(gè)新的表結(jié)構(gòu),再把原有舊表結(jié)構(gòu)和數(shù)據(jù)一起刪除,所以它屬于數(shù)據(jù)定義語(yǔ)言 DDL,而非數(shù)據(jù)操縱語(yǔ)言 DML。

4.回滾支持不同

delete 屬于 DML 支持事務(wù)回滾操作,而 truncate 和 drop 屬于 DDL,執(zhí)行之后立馬生效,且數(shù)據(jù)是不可恢復(fù)的,接下來(lái)我們來(lái)驗(yàn)證一下。首先先將 MySQL 的自動(dòng)事務(wù)提交關(guān)閉,自動(dòng)事務(wù)提交的默認(rèn)值是“ON”也就是開啟了自動(dòng)提交,如下圖所示:

我們使用以下命令將自動(dòng)提交(事務(wù))關(guān)掉:

set autocommit=off;

再次查詢事務(wù)自動(dòng)提交的設(shè)置結(jié)果如下:

接下來(lái)我們演示一下 delete 的回滾操作,如下圖所示:

從上述結(jié)果可以看出 delete 之后是可以進(jìn)行恢復(fù)(回滾)的,而 truncate 和 drop 之后是不能回滾的,各位老鐵可以使用相同的方法自行測(cè)試一下后兩種 SQL 的執(zhí)行。

5.自增初始化不同

delete 不會(huì)重置自增字段的初始值,如下圖所示:

而 truncate 會(huì)重置自增字段的初始值,如下圖所示:

6.執(zhí)行速度不同

delete 是逐行執(zhí)行的,并且在執(zhí)行時(shí)會(huì)把操作日志記錄下來(lái),以備日后回滾使用,所以 delete 的執(zhí)行速度是比較慢的;而 truncate 的操作是先復(fù)制一個(gè)新的表結(jié)構(gòu),再把原先的表整體刪除,所以它的執(zhí)行速度居中,而 drop 的執(zhí)行速度最快。

總結(jié)

truncate、drop 和 delete 的區(qū)別主要有以下 6 點(diǎn):

  • 執(zhí)行速度:drop > truncate > detele。
  • delete 和 truncate 只刪除表數(shù)據(jù),而 drop 會(huì)刪除表數(shù)據(jù)和表結(jié)構(gòu)以及表的索引、約束和觸發(fā)器。
  • delete 可以加 where 條件實(shí)現(xiàn)部分?jǐn)?shù)據(jù)刪除,而 truncate 和 drop 不能加 where 條件是整體刪除。
  • truncate 和 drop 是立即執(zhí)行,且不能恢復(fù);而 delete 會(huì)走事務(wù),可以撤回和恢復(fù)。
  • truncate 會(huì)重置自增列為 1,而 delete 不會(huì)重置自增列。
  • truncate 和 drop 是 DDL 語(yǔ)句,而 delete 是 DML 語(yǔ)句。

網(wǎng)站名稱:Truncate、Delete和Drop的六大區(qū)別!你知道幾個(gè)?
文章網(wǎng)址:http://www.5511xx.com/article/cojcoio.html