A. sql server語句中delete和truncate的區別
相同點:
1.truncate和不帶where子句的delete、以及drop都會刪除表內的數據。
2.drop、truncate都是DDL語句(數據定義語言),執行後會自動提交。
不同點:
1. truncate 和 delete 只刪除數據不刪除表的結構(定義)
drop 語句將刪除表的結構被依賴的約束(constrain)、觸發器(trigger)、索引(index);依賴於該表的存儲過程/函數將保留,但是變為 invalid 狀態。
2. delete 語句是資料庫操作語言(dml),這個操作會放到 rollback segement 中,事務提交之後才生效;如果有相應的 trigger,執行的時候將被觸發。
truncate、drop 是資料庫定義語言(ddl),操作立即生效,原數據不放到 rollback segment 中,不能回滾,操作不觸發 trigger。
3.delete 語句不影響表所佔用的 extent,高水線(high watermark)保持原位置不動
drop 語句將表所佔用的空間全部釋放。
truncate 語句預設情況下見空間釋放到 minextents個 extent,除非使用reuse storage;truncate 會將高水線復位(回到最開始)。
4.速度,一般來說: drop> truncate > delete
5.安全性:小心使用 drop 和 truncate,尤其沒有備份的時候.否則哭都來不及
使用上,想刪除部分數據行用 delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當然用 drop
想保留表而將所有數據刪除,如果和事務無關,用truncate即可。如果和事務有關,或者想觸發trigger,還是用delete。
如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據。
6.delete是DML語句,不會自動提交。drop/truncate都是DDL語句,執行後會自動提交。
7、TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。
8、TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。如果要刪除表定義及其數據,請使用 DROP TABLE 語句。
9、對於由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由於 TRUNCATE TABLE 不記錄在日誌中,所以它不能激活觸發器。
10、TRUNCATE TABLE 不能用於參與了索引視圖的表。
資料來源於:
www.cnblogs.com/8765h/archive/2011/11/25/2374167.html
B. 關於SQL刪除語句TRUNCATE和DELETE
簡單說:TRUNCATE 刪除數據表的結構 DELETE 刪除數據表的數據 結構還在 如為欄位設置了標識列 identity(1,1)TRUNCATE 刪除數據後 再添加數據 就從1開始自增DELETE 刪除數據後 再添加數據 原來的使用的就不能再用了 也就是不是從1開始了 因為原來的佔用了
C. sql怎麼刪除一個表中的所有數據
刪除表數據有兩種方法:delete和truncate。具體語句如下:
一、RUNCATE TABLE name :
刪除表中的所有行,而不記錄單個行刪除操作。在這個指令之下,表格中的資料會完全消失,可是表格本身會繼續存在。
TRUNCATE TABLE 的語法:TRUNCATE TABLE name ,參數 name 是要截斷的表的名稱或要刪除其全部行的表的名稱。
二、Delete from tablename where 1=1
1、delete語法:
DELETE FROM 表名稱 WHERE 列名稱 = 值。
2、刪除所有行:
可以在不刪除表的情況下刪除所有的行。這意味著表的結構、屬性和索引都是完整的:DELETE FROM table_name。
(3)sqltruncate語句擴展閱讀:
truncate和delete的共同點及區別:
1、 truncate和 delete只刪除數據不刪除表的結構(定義) 。
2、delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發。
truncate是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger。
3、delete語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動 。truncate 語句預設情況下見空間釋放到 minextents個 extent,除非使用reuse storage; truncate會將高水線復位(回到最開始)。
4、速度,一般來說: truncate >delete 。
D. sql 刪除語句
1、delete 語句用於刪除表中的行。delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中保存
語法:DELETE FROM 表名稱 WHERE 列名稱 = 值,
如:刪除student表中姓名為張三豐的學生信息-delete from studentwhere name=『張三豐』;
2、drop (刪除表):刪除內容和定義,釋放空間。簡單來說就是把整個表去掉.以後要新增數據是不可能的,除非新增一個表。
drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger)索引(index);依賴於該表的存儲過程/函數將被保留,但其狀態會變為:invalid。
3、truncate (清空表中的數據):刪除內容、釋放空間但不刪除定義(保留表的數據結構)。與drop不同的是,只是清空表數據而已。
注意:truncate 不能刪除行數據,要刪就要把表清空。
(4)sqltruncate語句擴展閱讀:
資料庫操作中,經常要用到刪除表和刪除表數據,在實際應用中,三者的區別是明確的。
當你不再需要該表時, 用 drop;
當你仍要保留該表,但要刪除所有記錄時, 用 truncate;
當你要刪除部分記錄時(always with a WHERE clause), 用 delete。
truncate 與delete 比較:
1、truncate table 在功能上與不帶 WHERE 子句的 delete語句相同:二者均刪除表中的全部行。
2、truncate 比 delete速度快,且使用的系統和事務日誌資源少。
3、truncate 操作後的表比Delete操作後的表要快得多。
E. 關於SQL刪除語句TRUNCATE和DELETE的問題
理解了本質你才會適時而用!
truncate你可以理解為ddl,
delete是dml。
ddl和dml的定義我不多說了。
truncate刪數就跟直接格式化硬碟類似,不管有多少數據,我就直接刪除,跟drop表一樣,無非就是空表留下了。速度不用提,快的很!
delete刪除是事務性的一條條刪,要記錄各種日誌,以防你反悔回滾!
因此刪一條,記錄一條,慢死!
但是,並不是那個快就胡亂用,如果你平時總是需要整表刪,那麼你用哪個清楚了吧嘿嘿
delete往往用在事務性操作裡面,比如刪除一條多條數據,如果你用delete刪除整表,實在浪費資源,而且對oracle來說,delete不會降低高水位,因此刪的次數多了表操作會變慢!
這是講刪除整表時的操作,記住凡事都有兩面性!truncate刪除不可恢復!delete還可以恢復!
說了那麼多,關鍵看怎麼用,多多實踐。我閑著沒事干,打了這些字,算是理解這兩個東西的基本入門概念,算是拋磚引玉!有分不用給我,因為我的這些概念到處都有。真正去用看自己了,那才是網路谷歌都沒法查到的東西。
F. 用SQL語句刪除某個表中的某行,truncate table 後面跟什麼語句
truncate table是截斷某個表,執行後那是一了百了,怎麼可能只刪一行。只刪一行使用delete 表名 where 查詢條件。
G. 關於SQL刪除語句TRUNCATE和DELETE
TRUNCATE
是將你的表初始化。假如現在你的表中有10條數據,現在TRUNCATE
TABLE
的話,就會將表還原為你最初剛創建好時的狀態。表剛創建好時肯定是沒有任何數據。因此數據就都沒有了。DELETE
TABLE雖然也將你表中的數據清除,但是在你的事務日誌文件(LDF)里,還會有相應的記錄。沒有徹底刪除。並且DELETE
TABLE
還可以刪除指定列,比如我想刪除ID為1的列。就可以寫:
delete
表名
where
id=1
都是自己寫的,希望對你有幫助!、、
H. 請問在sql中下列表中的內容清空用truncate table可以嗎應該怎麼寫
truncate table慎用.
一般使用delete 語句刪除表信息.
truncate table不光刪除表信息,同時還將重置表的一些參數,比如 自增值.
delete tablename;
truncate table tablename ;
對於表中數據,效果是樣的.都是刪除.