国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

sql中truncate,delete,drop的區別

2024-07-24 12:39:12
字體:
來源:轉載
供稿:網友

這三個命令的相同點truncate和不帶where子句的delete, 以及drop都會刪除表內的數據,不同點是truncate會清除表數據表置id從1開始,delete就只刪除記錄,drop可以用來刪除表或數據庫并且將表所占用的空間全部釋放

不同點:

1.truncate和 delete只刪除數據不刪除表的結構(定義)

drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴于該表的存儲過程/函數將保留,但是變為invalid狀態.

Truncate是SQL中的一個刪除數據表內容的語句,用法是:

語法   TRUNCATE TABLE name   

參數   name   

是要截斷的表的名稱或要刪除其全部行的表的名稱.

Truncate table 表名 速度快,而且效率高,因為:TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日志資源少.

2.delete語句是dml,這個操作會放到rollback segement中,事務提交之后才生效;如果有相應的trigger,執行的時候將被觸發.

truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.

DELETE 語句

DELETE 語句用于刪除表中的行,語法代碼如下:

  1. DELETE FROM 表名稱 WHERE 列名稱 = 值 
  2.  
  3. "Fred Wilson" 會被刪除: 
  4.  
  5. DELETE FROM Person WHERE LastName = 'Wilson' 

刪除所有行,可以在不刪除表的情況下刪除所有的行,這意味著表的結構、屬性和索引都是完整的,代碼如下:

  1. DELETE FROM table_name--或者:--Vevb.com 
  2.  
  3. DELETE * FROM table_name 

3.delete語句不影響表所占用的extent

drop語句將表所占用的空間全部釋放

truncate 語句缺省情況下見空間釋放到 minextents個 extent,除非使用reuse storage.

4.速度,一般來說: drop> truncate > delete

有時候我們會決定我們需要從數據庫中清除一個表格,事實上,如果我們不能這樣做的話,那將會是一個很大的問題,因為數據庫管理師 (Database Administrator -- DBA) 勢必無法對數據庫做有效率的管理,還好,SQL 有提供一個 DROP TABLE的語法來讓我們清除表格,DROP TABLE 的語法是:

DROP TABLE "表格名"

我們如果要清除在SQL CREATE 中建立的顧客表格,我們就打入如下代碼:

DROP TABLE customer. 

5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及使用上,想刪除部分數據行用delete,注意帶上where子句. 回滾段要足夠大.想刪除表用drop

想保留表而將所有數據刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用delete.

如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據。

總結,在使用上面三種命令時最好用delete來代替,其它兩個都是非常危險工作,一不小心你的數據庫或表可能被刪除或清除哦。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武山县| 平南县| 长海县| 旬阳县| 二连浩特市| 五台县| 迁西县| 孟州市| 和政县| 曲阜市| 临沧市| 噶尔县| 三江| 格尔木市| 拜城县| 呼图壁县| 柞水县| 布拖县| 盐城市| 铜梁县| 龙江县| 宁都县| 普格县| 瑞丽市| 兴隆县| 西宁市| 精河县| 基隆市| 香格里拉县| 温州市| 土默特左旗| 肃宁县| 和硕县| 景东| 汝州市| 河津市| 饶平县| 营口市| 苏尼特右旗| 巴南区| 准格尔旗|