欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL Truncate用法詳解

 更新時(shí)間:2021年03月19日 17:09:58   作者:MySQL技術(shù)  
這篇文章主要介紹了MySQL Truncate用法的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下

刪除表中的數(shù)據(jù)的方法有delete,truncate, 其中TRUNCATE TABLE用于刪除表中的所有行,而不記錄單個(gè)行刪除操作。TRUNCATE TABLE 與沒有 WHERE 子句的 DELETE 語句類似;但是,TRUNCATE TABLE 速度更快,使用的系統(tǒng)資源和事務(wù)日志資源更少。下面介紹SQL中Truncate的用法

當(dāng)你不再需要該表時(shí), 用 drop;當(dāng)你仍要保留該表,但要?jiǎng)h除所有記錄時(shí), 用 truncate;當(dāng)你要?jiǎng)h除部分記錄時(shí)(always with a WHERE clause), 用 delete.

Truncate是一個(gè)能夠快速清空資料表內(nèi)所有資料的SQL語法。并且能針對(duì)具有自動(dòng)遞增值的字段,做計(jì)數(shù)重置歸零重新計(jì)算的作用。

MySQL Truncate用法

一、Truncate語法

[ { database_name.[ schema_name ]. | schema_name . } ]
table_name
[ ; ]

參數(shù)

database_name
數(shù)據(jù)庫的名稱。

schema_name
表所屬架構(gòu)的名稱。

table_name
要截?cái)嗟谋淼拿Q,或要?jiǎng)h除其全部行的表的名稱。

二、Truncate使用注意事項(xiàng)

1、TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統(tǒng)和事務(wù)日志資源少。

2、DELETE 語句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。TRUNCATE TABLE 通過釋放存儲(chǔ)表數(shù)據(jù)所用的數(shù)據(jù)頁來刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁的釋放。

3、TRUNCATE TABLE 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。新行標(biāo)識(shí)所用的計(jì)數(shù)值重置為該列的種子。如果想保留標(biāo)識(shí)計(jì)數(shù)值,請(qǐng)改用 DELETE。如果要?jiǎng)h除表定義及其數(shù)據(jù),請(qǐng)使用 DROP TABLE 語句。

4、對(duì)于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應(yīng)使用不帶 WHERE 子句的 DELETE 語句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發(fā)器。

5、TRUNCATE TABLE 不能用于參與了索引視圖的表。

6、對(duì)用TRUNCATE TABLE刪除數(shù)據(jù)的表上增加數(shù)據(jù)時(shí),要使用UPDATE STATISTICS來維護(hù)索引信息。

7、如果有ROLLBACK語句,DELETE操作將被撤銷,但TRUNCATE不會(huì)撤銷。

三、不能對(duì)以下表使用 TRUNCATE TABLE

1、由 FOREIGN KEY 約束引用的表。(您可以截?cái)嗑哂幸米陨淼耐怄I的表。)

2、參與索引視圖的表。

3、通過使用事務(wù)復(fù)制或合并復(fù)制發(fā)布的表。

4、對(duì)于具有以上一個(gè)或多個(gè)特征的表,請(qǐng)使用 DELETE 語句。

5、TRUNCATE TABLE 不能激活觸發(fā)器,因?yàn)樵摬僮鞑挥涗浉鱾€(gè)行刪除。

四、TRUNCATE、Drop、Delete區(qū)別

1.drop和delete只是刪除表的數(shù)據(jù)(定義),drop語句將刪除表的結(jié)構(gòu)、被依賴的約束(constrain)、觸發(fā)器 (trigger)、索引(index);依賴于該表的存儲(chǔ)過程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài)。
2.delete語句是DML語言,這個(gè)操作會(huì)放在rollback segement中,事物提交后才生效;如果有相應(yīng)的觸發(fā)器(trigger),執(zhí)行的時(shí)候?qū)⒈挥|發(fā)。truncate、drop是DDL語言,操作后即 生效,原數(shù)據(jù)不會(huì)放到rollback中,不能回滾,操作不會(huì)觸發(fā)trigger。

3.delete語句不影響表所占用的extent、高水線(high watermark)保持原位置不動(dòng)。drop語句將表所占用的空間全部釋放。truncate語句缺省情況下將空間釋放到minextents的 extent,除非使用reuse storage。truncate會(huì)將高水線復(fù)位(回到最初)。

4.效率方面:drop > truncate > delete

5.安全性:小心使用drop與truncate,尤其是在 沒有備份的時(shí)候,想刪除部分?jǐn)?shù)據(jù)可使用delete需要帶上where子句,回滾段要足夠大,想刪除表可以用drop,想保留表只是想刪除表的所有數(shù)據(jù)、 如果跟事物無關(guān)可以使用truncate,如果和事物有關(guān)、又或者想觸發(fā) trigger,還是用delete,如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入、插入數(shù)據(jù)。

6.delete是DML語句,不會(huì)自動(dòng)提交。drop/truncate都是DDL語句,執(zhí)行后會(huì)自動(dòng)提交。

7、drop一般用于刪除整體性數(shù)據(jù) 如表,模式,索引,視圖,完整性限制等;delete用于刪除局部性數(shù)據(jù) 如表中的某一元組

8、DROP把表結(jié)構(gòu)都刪了;DELETE只是把數(shù)據(jù)清掉

9、當(dāng)你不再需要該表時(shí), 用 drop;當(dāng)你仍要保留該表,但要?jiǎng)h除所有記錄時(shí), 用 truncate;當(dāng)你要?jiǎng)h除部分記錄時(shí)(always with a WHERE clause), 用 delete.

MYSQL中TRUNCATE和DELETE的區(qū)別

MYSQL中TRUNCATE和DELETE都能夠清理表中的數(shù)據(jù),但是他們有什么區(qū)別呢?我們從下面的幾點(diǎn)來分析:

1. 條件刪除

這個(gè)比較好理解,因?yàn)镈ELETE是可以帶WHERE的,所以支持條件刪除;而TRUNCATE只能刪除整個(gè)表。

# delete - 條件刪除
DELETE FROM student WHERE id = 1;
# delete - 刪除整個(gè)表的數(shù)據(jù)
DELETE FROM student;
# truncate - 刪除整個(gè)表的數(shù)據(jù)
TRUNCATE TABLE student;

2. 事務(wù)回滾

由于DELETE是數(shù)據(jù)操作語言(DML - Data Manipulation Language),操作時(shí)原數(shù)據(jù)會(huì)被放到 rollback segment中,可以被回滾;而TRUNCATE是數(shù)據(jù)定義語言(DDL - Data Definition Language),操作時(shí)不會(huì)進(jìn)行存儲(chǔ),不能進(jìn)行回滾。

可以看到DELETE是可以回滾成功的。

可以看到TRUNCATE是不能回滾成功的。

3. 清理速度

在數(shù)據(jù)量比較小的情況下,DELETE和TRUNCATE的清理速度差別不是很大。但是數(shù)據(jù)量很大的時(shí)候就能看出區(qū)別。由于第二項(xiàng)中說的,TRUNCATE不需要支持回滾,所以使用的系統(tǒng)和事務(wù)日志資源少。DELETE 語句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng),固然會(huì)慢,但是相對(duì)來說也較安全。

4. 高水位重置

隨著不斷地進(jìn)行表記錄的DML操作,會(huì)不斷提高表的高水位線(HWM),DELETE操作之后雖然表的數(shù)據(jù)刪除了,但是并沒有降低表的高水位,隨著DML操作數(shù)據(jù)庫容量也只會(huì)上升,不會(huì)下降。所以如果使用DELETE,就算將表中的數(shù)據(jù)減少了很多,在查詢時(shí)還是很和DELETE操作前速度一樣。
而TRUNCATE操作會(huì)重置高水位線,數(shù)據(jù)庫容量也會(huì)被重置,之后再進(jìn)行DML操作速度也會(huì)有提升。

MySQL Truncate用法補(bǔ)充

前言:

當(dāng)我們想要清空某張表時(shí),往往會(huì)使用truncate語句。大多時(shí)候我們只關(guān)心能否滿足需求,而不去想這類語句的使用場景及注意事項(xiàng)。本篇文章主要介紹truncate語句的使用方法及注意事項(xiàng)。

1.truncate使用語法

truncate的作用是清空表或者說是截?cái)啾?,只能作用于表。truncate的語法很簡單,后面直接跟表名即可.

例如:truncate table tbl_name 或者 truncate tbl_name 。

執(zhí)行truncate語句需要擁有表的drop權(quán)限,從邏輯上講,truncate table類似于delete刪除所有行的語句或drop table然后再create table語句的組合。為了實(shí)現(xiàn)高性能,它繞過了刪除數(shù)據(jù)的DML方法,因此,它不能回滾。盡管truncate table與delete相似,但它被分類為DDL語句而不是DML語句。

2.truncate與drop,delete的對(duì)比

上面說過truncate與delete,drop很相似,其實(shí)這三者還是與很大的不同的,下面簡單對(duì)比下三者的異同。

  • truncate與drop是DDL語句,執(zhí)行后無法回滾;delete是DML語句,可回滾。
  • truncate只能作用于表;delete,drop可作用于表、視圖等。
  • truncate會(huì)清空表中的所有行,但表結(jié)構(gòu)及其約束、索引等保持不變;drop會(huì)刪除表的結(jié)構(gòu)及其所依賴的約束、索引等。
  • truncate會(huì)重置表的自增值;delete不會(huì)。
  • truncate不會(huì)激活與表有關(guān)的刪除觸發(fā)器;delete可以。
  • truncate后會(huì)使表和索引所占用的空間會(huì)恢復(fù)到初始大??;delete操作不會(huì)減少表或索引所占用的空間,drop語句將表所占用的空間全釋放掉。

3.truncate使用場景及注意事項(xiàng)

通過前面介紹,我們很容易得出truncate語句的使用場景,即該表數(shù)據(jù)完全不需要時(shí)可以用truncate。如果想刪除部分?jǐn)?shù)據(jù)用delete,注意帶上where子句;如果想刪除表,當(dāng)然用drop;如果想保留表而將所有數(shù)據(jù)刪除且和事務(wù)無關(guān),用truncate即可;如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還是用delete;如果是整理表內(nèi)部的碎片,可以用truncate然后再重新插入數(shù)據(jù)。

無論怎樣,truncate表都是高危操作,特別是在生產(chǎn)環(huán)境要更加小心,下面列出幾點(diǎn)注意事項(xiàng),希望大家使用時(shí)可以做下參考。

  • truncate無法通過binlog回滾。
  • truncate會(huì)清空所有數(shù)據(jù)且執(zhí)行速度很快。
  • truncate不能對(duì)有外鍵約束引用的表使用。
  • 執(zhí)行truncate需要drop權(quán)限,不建議給賬號(hào)drop權(quán)限。
  • 執(zhí)行truncate前一定要再三檢查確認(rèn),最好提前備份下表數(shù)據(jù)。

以上就是MySQL Truncate用法詳解的詳細(xì)內(nèi)容,更多關(guān)于MySQL Truncate的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一篇文章帶你了解MySQL單表訪問方法

    一篇文章帶你了解MySQL單表訪問方法

    MySQL將對(duì)數(shù)據(jù)不同的訪問方式稱為access method (訪問方法),同一個(gè)SQL可以用不同的訪問方法執(zhí)行,不過不同的方法花費(fèi)的成本差異也是巨大的,下面這篇文章主要給大家介紹了關(guān)于MySQL單表訪問方法的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)

    MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)

    日期時(shí)間處理對(duì)大家來說應(yīng)該都不陌生了,下面這篇文章主要給大家介紹了關(guān)于MySQL常用的日期時(shí)間函數(shù),文中通過圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • mysql like查詢字符串示例語句

    mysql like查詢字符串示例語句

    在mysql中如果我們要模糊查詢數(shù)據(jù)我們可以使用like帶%%號(hào)來實(shí)現(xiàn)查詢,下面我來簡單的介紹一下關(guān)于mysql like使用方法
    2013-10-10
  • 在sql中實(shí)現(xiàn)取一行最大值或者最小值

    在sql中實(shí)現(xiàn)取一行最大值或者最小值

    這篇文章主要介紹了在sql中實(shí)現(xiàn)取一行最大值或者最小值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • MySQL數(shù)據(jù)庫主機(jī)127.0.0.1與localhost區(qū)別

    MySQL數(shù)據(jù)庫主機(jī)127.0.0.1與localhost區(qū)別

    這篇文章主要介紹了MySQL主機(jī)127.0.0.1與localhost區(qū)別總結(jié),需要的朋友可以參考下
    2018-06-06
  • MySQL中使用innobackupex、xtrabackup進(jìn)行大數(shù)據(jù)的備份和還原教程

    MySQL中使用innobackupex、xtrabackup進(jìn)行大數(shù)據(jù)的備份和還原教程

    這篇文章主要介紹了MySQL中使用innobackupex、xtrabackup進(jìn)行大數(shù)據(jù)的備份和還原教程,xtrabackup用來對(duì)超過10G數(shù)據(jù)的Mysql進(jìn)行備份和還原任務(wù),需要的朋友可以參考下
    2014-09-09
  • MySQL安裝常見報(bào)錯(cuò)處理方法總結(jié)大全

    MySQL安裝常見報(bào)錯(cuò)處理方法總結(jié)大全

    MySQL數(shù)據(jù)庫在安裝或卸載的過程中,常常會(huì)出現(xiàn)一些錯(cuò)誤,這是件讓我們頭疼的事,下面這篇文章主要給大家介紹了關(guān)于MySQL安裝常見報(bào)錯(cuò)處理方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • MySQL表的重命名字段添加及字段屬性修改操作語法

    MySQL表的重命名字段添加及字段屬性修改操作語法

    這篇文章主要為大家介紹了MySQL表的重命名字段添加及字段屬性修改語法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • mysql配置文件的使用教程

    mysql配置文件的使用教程

    這篇文章主要介紹了mysql配置文件的使用教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-10-10
  • MySQL字段定義時(shí)的屬性設(shè)置方式

    MySQL字段定義時(shí)的屬性設(shè)置方式

    這篇文章主要介紹了MySQL字段定義時(shí)的屬性設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評(píng)論