php delete和truncate,TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。...
TRUNCATE 刪除表,無法回退。默認選擇為整個表的內容,所以不能加條件。
DELETE 刪除表,可以回退??梢詭here 條件。建議使用delete。但是TRUNCATE 刪除表數據比delete要快。
使用TRUNCATE TABLE語句
TRUNCATE TABLE語句提供了一種刪除表中所有記錄的快速方法。因為TRUNCATE TABLE語句不記錄日志,只記錄整個數據頁的釋放操作,而DELETE語句對每一行修改都記錄日志,所以使用TRUNCATE TABLE語句進行刪除操作總是比沒有指定條件的DELETE語句效率高。TRUNCATE TABLE立即釋放了表中數據及索引所占用的全部空間,同時也釋放了分配給所有索引的空間。其語法格式如下:
TRUNCATE TABLE [ [database.] owner.] table_name
與DELETE語句相比,TRUNCATE TABLE具有以下優點:
l?? 所用的事務日志空間較少? DELETE語句每次刪除一行,并在事務日志中為所刪除的每行記錄一個項。TRUNCATE TABLE通過釋放用于存儲表數據的數據頁來刪除數據,并且在事務日志中只記錄頁釋放。
l?? 使用的鎖通常較少? 當使用行鎖執行DELETE語句時,將會鎖定表中各行以便刪除。TRUNCATE TABLE始終鎖定表和頁,而不是鎖定各行。
l?? 表中將毫無例外地不留下任何頁? 執行DELETE語句后,表仍會包含空頁。例如,必須至少使用一個排他(LCK_M_X)表鎖,才能釋放堆中的空表。如果執行刪除操作時沒有使用表鎖,表(堆)中將包含許多空頁。對于索引,刪除操作會留下一些空頁,盡管如此,不過這些頁會通過后臺清除進程迅速釋放。
那么可不可以用TRUNCATE TABLE代替不帶WHERE子句的DELETE語句呢?在以下幾種情況是不行的:
l?? 在需要保留標識的情況下不能用TRUNCATE TABLE,因為TRUNCATE TABLE會重置標識。
l?? 在需要使用觸發器的情況下不能使用TRUNCATE TABLE,因為它不會激發觸發器。
l?? 對于由FOREIGN KEY約束引用的表(即主鍵所在的表,不是外鍵所在的表)不能使用TRUNCATE TABLE.
l?? 對于參與了索引視圖的表不能使用TRUNCATE TABLE,注意指的是索引視圖,并非普通視圖。
那么用戶需要具有什么權限才可以使用TRUNCATE TABLE呢?若要使用TRUNCATE TABLE語句,必須是表的所有者,具有DBA權限或表的ALTER權限。對于基表,TRUNCATE TABLE語句需要有表的排他訪問權限,因為操作是原子操作(要么刪除所有行,要么不刪除任何行)。這意味著所有以前打開的游標和引用要截斷的表的游標都必須關閉,并且必須發出COMMIT或ROLLBACK命令釋放對表的引用。對于臨時表,每個用戶都有自己的數據副本,不需要排他訪問。
下面結合一個簡單的實例來說明如何使用TRUNCATE TABLE語句。比如需要刪除商品信息表中的所有數據,可以使用如下語句:
TRUNCATE TABLE 商品信息
由于TRUNCATE TABLE操作是不進行日志記錄的,所以建議在TRUNCATE TABLE語句之前使用BACKUP DATABASE語句來對數據庫做備份。
(轉) Delete/Truncate刪除,釋放表空間、降低高水位線、resize釋放磁盤空間相關優化
硬盤空間不足,打算刪除數據庫中的多余數據,但刪除數據后,硬盤硬盤空間不能釋放.[delete后用:alter table table_name move??? truncate后用:alter tab ...
Oracle的閃回特性之恢復truncate刪除表的數據
Oracle的閃回特性之恢復truncate刪除表的數據 SQL> show parameter flashback NAME???????????????????????????????? T ...
MySQL之存儲引擎(表類型)的選擇
和大部分的數據庫不同,MySQL中有一個存儲引擎的概念,用戶可以根據數據存儲的需求來選擇不同的存儲引擎.本次博客就來介紹一下MySQL中的存儲引擎.MySQL版本 5.7.19. 概述 MySQL的存 ...
談談數據庫中MyISAM與InnoDB區別 針對業務類型選擇合適的表
MyISAM:這個是默認類型,它是基于傳統的ISAM類型, ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存儲記錄和文件的標準方法. ...
Django-開放靜態資源-獲取請求攜帶的數據-pychram連接數據庫-修改Django默認數據庫-DjangoORM操作--表管理-記錄管理-01
目錄 關于靜態資源訪問 為什么要配置靜態文件才能獲取靜態資源 常見的靜態文件種類 如何配置來開啟訪問權限 禁用瀏覽器緩存 django的自動重啟機制(熱啟動) 靜態文件接口動態解析 向服務器發送數據 ...
truncate刪除一個分區,測試全局索引是否失效
目的,有一個清理數據的需求,需要刪除歷史的一個分區所有記錄信息,但是存在主鍵global索引,如何更好的維護. 如下測試流程一 提前創建好一個已時間created 字段作為分區鍵的范圍分區表 SQL& ...
Greenplum 行存、列存,堆表、AO表的原理和選擇
轉載自: https://github.com/digoal/blog/blob/master/201708/20170818_02.md?spm=a2c4e.11153940.blogcont179 ...
隨機推薦
ArcGIS Engine開發之書簽加載
ArcGIS中書簽是保存特定視圖范圍的快捷方式.使用書簽保存關注的視圖范圍,可在需要時快速定位.查看與瀏覽.書簽功能主要用到IMapBookmarks.ISpatialBookmark和IAOIBoo ...
fflush函數的深入理解
本人昵稱sky,歡迎與各位多多交流學習 這樣的c程序想必大家都不陌生,fflush()這個函數有清除輸入輸出緩存的功能,那很多人就會問了,什么是清除輸入輸出緩存呢? 其實就是我們在printf輸出的時 ...
網絡編程之PC版與Android手機版帶斷點續傳的多線程下載
一.多線程下載 ? ? ? ? 多線程下載就是搶占服務器資源 ? ? ? ? 原理:服務器CPU 分配給每條線程的時間片相同,服務器帶寬平均分配給每條線程,所以客戶端開啟的線程越多,就能搶占到更多的服 ...
google gflags使用.
code.google.com 被墻的好開心... gflags很簡單. 編譯使用都很簡單. (不像omaha這種喪心病狂的編譯依賴). cmake 生成一下. 一路順風順水. 值得注意的是: ?默認 ...
Linux 安裝oracle10g 配置dataguard 介紹和步驟
DataGuard是甲骨文推出的一種高可用性數據庫方案,在Oracle 8i之前被稱為Standby Database.從Oracle 9i開始,正式更名為Data Guard.它是在 ...
Spring與Hibernate整合之通用Dao的實現
在上一篇文章中寫了如何直接利用HibernateTemplate進行數據庫操作,但在一般的項目中很少直接得到HibernateTemplate的Bean對象從而操作數據庫的,下面就簡要介紹一下實現通用 ...
快速搭建Web環境 Angularjs + Express3 + Bootstrap3
快速搭建Web環境 Angularjs + Express3 + Bootstrap3 AngularJS體驗式編程系列文章, 將介紹如何用angularjs構建一個強大的web前端系統.angula ...
(原)Struts 相關資源下載
官網:http://struts.apache.org 點擊[Download],進入頁面如下,可以看到下載的資源: 點擊[struts-2.3.20-all.zip],就能獲取Struts2項目所有 ...
[BZOJ 3747] [POI 2015] Kinoman【線段樹】
Problem Link : BZOJ 3747 題解:ZYF-ZYF 神犇的題解 解題的大致思路是,當區間的右端點向右移動一格時,只有兩個區間的左端點對應的答案發生了變化. 從 f[i] + 1 到 ...
R中基本統計圖
一.條形圖 1.安裝包install.packages("vcd"); library(vcd);count
總結
以上是生活随笔為你收集整理的php delete和truncate,TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 荷花烟多少钱一包啊?
- 下一篇: php四种定界符