mysql刪除表資料幾種情況

2021-08-26 15:33:01 字數 2590 閱讀 3437

1、drop table table_name : 刪除表全部資料和表結構,立刻釋放磁碟空間,不管是 innodb 和 myisam;

例項,刪除學生表:

drop table student;
2、truncate table table_name : 刪除表全部資料,保留表結構,立刻釋放磁碟空間 ,不管是 innodb 和 myisam;

例項,刪除學生表:

truncate table student;
3、delete from table_name : 刪除表全部資料,表結構不變,對於 myisam 會立刻釋放磁碟空間,innodb 不會釋放磁碟空間;

例項,刪除學生表:

delete from student;
4、delete from table_name where *** : 帶條件的刪除,表結構不變,不管是 innodb 還是 myisam 都不會釋放磁碟空間;

例項,刪除學生表中姓名為 "張三" 的資料:

delete from student where t_name = "張三";
5、delete 操作以後,使用 optimize table table_name 會立刻釋放磁碟空間,不管是 innodb 還是 myisam;

例項,刪除學生表中姓名為 "張三" 的資料:

delete from student where t_name = "張三";
例項,釋放學生表的表空間:

optimize table student;
6、delete from 表以後雖然未釋放磁碟空間,但是下次插入資料的時候,仍然可以使用這部分空間。

1、當你不再需要該錶時, 用 drop;

2、當你仍要保留該錶,但要刪除所有記錄時, 用 truncate;

3、當你要刪除部分記錄時, 用 delete。

相同點:

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   不能用於參與了索引檢視的表。  

mysql 產生臨時表的幾種情況

1 union查詢 2 用到temptable演算法或者是union查詢中的檢視 3 order by和group by的子句不一樣時 4 表連線中,order by的列不是驅動表中的 5 distinct查詢並且加上order by時 6 sql中用到sql small result選項時 7 f...

mysql刪除表的幾種方式

刪除表的幾種方式 建立乙個資料庫為 mybatis,表為user,插入幾條資料 drop table user 直接刪除表資訊,最快 truncate table user 刪除表資料,不刪除表的結構,速度排第二 delete from user where 1 1 根據條件刪除資料,不刪除表結構,...

Pandas刪除資料的幾種情況 小結

開始之前,pandas中dataframe刪除物件可能存在幾種情況 1 刪除具體列 2 刪除具體行 3 刪除包含某些數值的行或者列 4 刪除包含某些字元 文字的行或者列 本文就針對這四種情況 一下如何操作。資料準備 模擬了乙份 交割的記錄。in 1 import pandas as pd in 2 ...