sqlserver中drop、truncate和delete語(yǔ)句的用法
雖然小編不建議大家去用命令刪除數(shù)據(jù)庫(kù)表中的東西,但是這些刪除命令總有用的著的地方。
說(shuō)到刪除表數(shù)據(jù)的關(guān)鍵字,大家記得最多的可能就是delete了
然而我們做數(shù)據(jù)庫(kù)開發(fā),讀取數(shù)據(jù)庫(kù)數(shù)據(jù).對(duì)另外的兩兄弟用得就比較少了
現(xiàn)在來(lái)介紹另外兩個(gè)兄弟,都是刪除表數(shù)據(jù)的,其實(shí)也是很容易理解的
老大------drop
出沒(méi)場(chǎng)合:drop table tb --tb表示數(shù)據(jù)表的名字,下同
絕招:刪除內(nèi)容和定義,釋放空間。簡(jiǎn)單來(lái)說(shuō)就是把整個(gè)表去掉.以后要新增數(shù)據(jù)是不可能的,除非新增一個(gè)表,
例如:一個(gè)班就是一個(gè)表,學(xué)生就是表中的數(shù)據(jù),學(xué)生的職務(wù)就是定義
drop table class,就是把整個(gè)班移除.學(xué)生和職務(wù)都消失
比如下面TestSchool數(shù)據(jù)庫(kù)中有兩張表[Classes]表和[Teacher]表

當(dāng)執(zhí)行下面代碼之后

Classes表就被清楚,一干二凈! 刪除得非常暴力,作為老大實(shí)至名歸

老二-----truncate
出沒(méi)場(chǎng)合:truncate table tb
絕招:刪除內(nèi)容、釋放空間但不刪除定義。與drop不同的是,他只是清空表數(shù)據(jù)而已,他比較溫柔.
同樣也是一個(gè)班,他只去除所有的學(xué)生.班還在,職務(wù)還在,如果有新增的學(xué)生可以進(jìn)去,也可以分配上職務(wù)
刪除內(nèi)容很容易理解,不刪除定義也很容易理解,就是保留表的數(shù)據(jù)結(jié)構(gòu)

上圖就表現(xiàn)了:刪除內(nèi)容

執(zhí)行語(yǔ)句之后,發(fā)現(xiàn)數(shù)據(jù)表的結(jié)構(gòu)還在,也就是不刪除定義
至于釋放空間,看下下面兩幅圖.你們就會(huì)明白的

右圖:Id列標(biāo)識(shí)列,因之前delete過(guò)行數(shù)據(jù),所以會(huì)出現(xiàn)標(biāo)識(shí)列不連續(xù)(體現(xiàn)了delete刪除是不釋放空間的)
經(jīng)過(guò)truncate table Teacher 之后 再新增三條數(shù)據(jù)

右圖:同樣Id是標(biāo)識(shí)列,發(fā)現(xiàn)插入數(shù)據(jù)的時(shí)候,標(biāo)識(shí)列連續(xù)了(體現(xiàn)了truncate刪除是釋放空間)
注意:truncate 不能刪除行數(shù)據(jù),要?jiǎng)h就要把表清空
老三-----delete
出沒(méi)場(chǎng)合:delete table tb --雖然也是刪除整個(gè)表的數(shù)據(jù),但是過(guò)程是痛苦的(系統(tǒng)一行一行地刪,效率較truncate低)
或
delete table tb where 條件
絕招:刪除內(nèi)容不刪除定義,不釋放空間。三兄弟之中最容易欺負(fù)的一個(gè)
然后關(guān)于delete的就不詳細(xì)說(shuō)明了,大家都懂的
關(guān)于truncate的小小總結(jié):
truncate table 在功能上與不帶 WHERE 子句的 delete語(yǔ)句相同:二者均刪除表中的全部行。
但 truncate 比 delete速度快,且使用的系統(tǒng)和事務(wù)日志資源少。
delete 語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。所以可以對(duì)delete操作進(jìn)行roll back
1、truncate 在各種表上無(wú)論是大的還是小的都非常快。如果有ROLLBACK命令Delete將被撤銷,而 truncate 則不會(huì)被撤銷。
2、truncate 是一個(gè)DDL語(yǔ)言,向其他所有的DDL語(yǔ)言一樣,他將被隱式提交,不能對(duì) truncate 使用ROLLBACK命令。
3、truncate 將重新設(shè)置高水平線和所有的索引。在對(duì)整個(gè)表和索引進(jìn)行完全瀏覽時(shí),經(jīng)過(guò) truncate 操作后的表比Delete操作后的表要快得多。
4、truncate 不能觸發(fā)任何Delete觸發(fā)器。
5、當(dāng)表被清空后表和表的索引講重新設(shè)置成初始大小,而delete則不能。
6、不能清空父表
相關(guān)文章
14種SQL的進(jìn)階用法分享(更高效地處理數(shù)據(jù))
在實(shí)際的數(shù)據(jù)庫(kù)使用中除了CRUD還有很多高級(jí)應(yīng)用值得學(xué)習(xí)和掌握,能夠在平時(shí)的工作中得到很多便利,這篇文章主要給大家分享介紹了14種SQL的進(jìn)階用法,通過(guò)文中介紹的方法可以更高效地處理數(shù)據(jù)庫(kù)數(shù)據(jù),需要的朋友可以參考下2024-01-01
Access與sql server的語(yǔ)法區(qū)別總結(jié)
這篇文章主要介紹了Access與sql server的語(yǔ)法區(qū)別總結(jié),需要的朋友可以參考下2007-03-03
國(guó)產(chǎn)開源數(shù)據(jù)庫(kù)openGauss容器部署過(guò)程詳解
openGauss是一款開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它具有多核高性能、全鏈路安全性、智能運(yùn)維等企業(yè)級(jí)特性,這篇文章主要介紹了國(guó)產(chǎn)開源數(shù)據(jù)庫(kù)openGauss容器部署,需要的朋友可以參考下2022-08-08
SQL注入篇學(xué)習(xí)之盲注/寬字節(jié)注入
盲注是注入的一種,指的是在不知道數(shù)據(jù)庫(kù)返回值的情況下對(duì)數(shù)據(jù)中的內(nèi)容進(jìn)行猜測(cè),實(shí)施SQL注入,下面這篇文章主要給大家介紹了關(guān)于SQL注入篇之盲注/寬字節(jié)注入的相關(guān)資料,需要的朋友可以參考下2022-03-03
Linux下實(shí)現(xiàn)OpenGauss數(shù)據(jù)庫(kù)遠(yuǎn)程連接的教程
openGauss是一款開源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),采用木蘭寬松許可證v2發(fā)行,本文主要為大家詳細(xì)介紹了如何在Linux環(huán)境下實(shí)現(xiàn)OpenGauss數(shù)據(jù)庫(kù)遠(yuǎn)程連接,需要的可以參考下2023-09-09
虛擬主機(jī)ACCESS轉(zhuǎn)換成MSSQL完全攻略(圖文教程)
大家都知道,ACCESS數(shù)據(jù)庫(kù)在數(shù)據(jù)量到達(dá)一定程度后,訪問(wèn)速度會(huì)明顯變慢,甚至造成崩潰。目前,大多數(shù)虛擬主機(jī)服務(wù)商提供的ASP主機(jī)空間一般都同時(shí)支持MS ACCESS和MS SQL兩種類型的數(shù)據(jù)庫(kù)。2010-04-04
使用DataGrip創(chuàng)建數(shù)據(jù)庫(kù)并讀取sql文件圖文教程
這篇文章主要給大家介紹了關(guān)于使用DataGrip創(chuàng)建數(shù)據(jù)庫(kù)并讀取sql文件的相關(guān)資料,DataGrip是一款數(shù)據(jù)庫(kù)管理客戶端工具,方便連接到數(shù)據(jù)庫(kù)服務(wù)器,執(zhí)行sql、創(chuàng)建表、創(chuàng)建索引以及導(dǎo)出數(shù)據(jù)等,需要的朋友可以參考下2023-11-11
免費(fèi)開源數(shù)據(jù)庫(kù):SQLite、MySQL和PostgreSQL的優(yōu)缺點(diǎn)
對(duì)于處理大規(guī)模數(shù)據(jù)和高并發(fā)訪問(wèn)的場(chǎng)景,MySQL和PostgreSQL更適合,SQLite在小型應(yīng)用程序或嵌入式設(shè)備中是一種輕量級(jí)、簡(jiǎn)單和易于使用的選擇,根據(jù)具體的應(yīng)用需求和場(chǎng)景特點(diǎn),選擇合適的開源關(guān)系型數(shù)據(jù)庫(kù)可以提供更好的性能、可擴(kuò)展性和靈活性2024-02-02
解決mac上Navicat新建數(shù)據(jù)庫(kù)3680錯(cuò)誤問(wèn)題
這篇文章主要介紹了mac上Navicat新建數(shù)據(jù)庫(kù)3680錯(cuò)誤解決辦法,很多朋友遇到這個(gè)問(wèn)題不知道該如何解決,網(wǎng)上一搜一大把,但是不能解決核心問(wèn)題,下面小編把我的解決過(guò)程分享給大家,需要的朋友可以參考下2021-11-11
neo4j實(shí)現(xiàn)創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)
這篇文章主要介紹了neo4j實(shí)現(xiàn)創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02

