電子音樂drop等術(shù)語 詳解SQL中drop,delete和truncate的異同?
詳解SQL中drop,delete和truncate的異同?三者的區(qū)別是:從表名中刪除后,表結(jié)構(gòu)仍然存在,只刪除表中的所有數(shù)據(jù)。從表名中刪除drop后,表結(jié)構(gòu)和數(shù)據(jù)將被刪除。此外,在執(zhí)行delete之
詳解SQL中drop,delete和truncate的異同?
三者的區(qū)別是:從表名中刪除后,表結(jié)構(gòu)仍然存在,只刪除表中的所有數(shù)據(jù)。從表名中刪除drop后,表結(jié)構(gòu)和數(shù)據(jù)將被刪除。此外,在執(zhí)行delete之后還有一個(gè)提交過程,刪除操作一步完成。一般來說,drop比truncate和delete都快。小心使用drop和truncate,尤其是在沒有備份的情況下,否則將找不到數(shù)據(jù)。相同的一點(diǎn):truncate,delete without where子句和drop將刪除表中的數(shù)據(jù)
安全部門的負(fù)責(zé)人,數(shù)據(jù)庫DBA,應(yīng)該首當(dāng)其沖地承擔(dān)事故。錯(cuò)誤的根本原因不是工程師。如果錯(cuò)誤在生產(chǎn)環(huán)境中,則不應(yīng)有刪除、刪除、截?cái)鄼?quán)限。
但作為一個(gè)企業(yè),必須有人對(duì)事故負(fù)責(zé)。所以,你是天子。把罐子帶走,你不能把它送人。
drop,truncate和delete的區(qū)別?
——?jiǎng)h除表結(jié)構(gòu),刪除其中的數(shù)據(jù),刪除表上的索引,等等。Drop table name——清除數(shù)據(jù),只截短數(shù)據(jù)table name——根據(jù)條件刪除數(shù)據(jù)delete from table name where condition——?jiǎng)h除所有數(shù)據(jù),但不釋放空間delete from table name。所以,delete from table name和truncate table看起來表名是一樣的,但是truncate執(zhí)行之后,數(shù)據(jù)庫的空間會(huì)被釋放。如果delete不釋放drop table name的空間,也可以在drop之后執(zhí)行truncate釋放該空間,觸發(fā)器、存儲(chǔ)過程、函數(shù)等都將無效。Truncate可以重新編譯,但是刪除之后,它可能會(huì)永久無效
Truncate和delete有以下區(qū)別:1。Truncate在所有類型的表上都非常快,無論大小。如果有回滾命令,delete將被撤銷,而truncate將不會(huì)被撤銷。2Truncate是一種DDL語言。與所有其他DDL語言一樣,它將隱式提交,并且不能在truncate上使用rollback命令。三。Truncate將重置高級(jí)行和所有索引。在完全瀏覽整個(gè)表和索引時(shí),截?cái)嗖僮骱蟮谋肀葎h除操作后的表要快得多。4Truncate不能觸發(fā)任何delete觸發(fā)器。5任何人都無權(quán)清空其他人的表。6清除表時(shí),表及其索引將重置為初始大小,而不能刪除。7不能清空父表。TRUNCATETABLE(schema)表unamedrop(重用)store默認(rèn)為dropstore。當(dāng)使用dropstore時(shí),它將縮短表和表索引,將表縮小到最小范圍,并重置下一個(gè)參數(shù)。Reusestorage不會(huì)縮短表或調(diào)整下一個(gè)參數(shù)。在特殊情況下,刪除的過程是每次使用reusest
delete語句從表中刪除一行。同時(shí),刪除的行作為回滾事務(wù)記錄保存在日志中。
Truncatetable可以一次刪除表中的所有數(shù)據(jù)頁。日志中不記錄個(gè)別刪除操作記錄,刪除的行無法恢復(fù)。另外,刪除過程中不會(huì)激活與表相關(guān)的刪除觸發(fā)器。執(zhí)行速度很快。
SQLServer中truncate,delete和drop的異同點(diǎn)?
1. 表和索引占用的空間。當(dāng)表被截?cái)鄷r(shí),表和索引占用的空間將恢復(fù)為原始大小,刪除操作不會(huì)減少表或索引占用的空間。2適用范圍。Truncate只能用于表;delete可以用于表和視圖。三。Truncate和delete只刪除數(shù)據(jù),drop則刪除整個(gè)表(結(jié)構(gòu)和數(shù)據(jù))。4delete語句是DML(數(shù)據(jù)維護(hù)語言)。此操作將被放入回滾段,并且僅在提交事務(wù)后生效。如果有相應(yīng)的觸發(fā)器,則會(huì)在執(zhí)行過程中觸發(fā)。Truncate是一個(gè)DLL(數(shù)據(jù)定義語言)。行動(dòng)立即生效。如果不將原始數(shù)據(jù)放入回滾段,則無法回滾。5沒有備份時(shí),請(qǐng)小心使用truncate。要?jiǎng)h除一些數(shù)據(jù)行,請(qǐng)注意刪除和組合的位置,以限制影響范圍?;貪L段應(yīng)該足夠大。如果要保留表并刪除表中的數(shù)據(jù),如果與事務(wù)無關(guān),可以使用truncate。如果它與事務(wù)相關(guān)或總是希望觸發(fā),則仍然使用delete。6Truncate table既快速又高效,因?yàn)椋篢runcate table與delete語句相同,函數(shù)中沒有where子句:都刪除表中的所有行。然而,truncate table比delete更快,并且使用更少的系統(tǒng)和事務(wù)日志資源。delete語句一次刪除一行,并在事務(wù)日志中為每個(gè)刪除的行記錄一個(gè)條目。Truncate table通過釋放用于存儲(chǔ)表數(shù)據(jù)的數(shù)據(jù)頁來刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁面釋放。7Truncate table刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。用于新行ID的計(jì)數(shù)值將重置為列的種子。如果要保留標(biāo)識(shí)計(jì)數(shù)值,請(qǐng)改用delete。8結(jié)論:在使用截骨時(shí),應(yīng)注意截骨雖然可以恢復(fù),但應(yīng)謹(jǐn)慎使用,以減少麻煩。如果要?jiǎng)h除部分?jǐn)?shù)據(jù),請(qǐng)使用delete,注意where子句,回滾段應(yīng)該足夠大;如果要保留表并刪除所有數(shù)據(jù),如果與事務(wù)無關(guān),請(qǐng)使用truncate;如果與事務(wù)有關(guān),或者要觸發(fā),使用delete;如果要清理表的內(nèi)部片段,請(qǐng)使用truncate以保持重用,然后再次導(dǎo)入/插入數(shù)據(jù)。