truncate在不同版本中的區別

2022-07-03 11:30:10 字數 1055 閱讀 7620

中午和同事討論truncate到底會不會釋放資源,大部分都認為會,但是其實具體情況是和mysql的版本有關。

before 5.0.3

truncate是delete rows one by one。

between 5.0.3 and 5.0.8

當有外來鍵的時候還是delete rows one by on,但是當沒有外來鍵的時候會採用drop and re-create的方式來操作。

(並且,這個時候auto_increment的計數器會在truncate的時候置零。)

after 5.0.8

5.0.8之後在truncate的時候會增加implicit commit,增加事務的安全性。但是操作模式和之前一樣。

before 5.1.16

在5.1.16之前,truncate需要delete許可權才可以執行。

between 5.1.16 and 5.1.39

對於5.1.16之後,truncate操作需要drop許可權才可以執行。對於innodb的表,如果沒有外來鍵,那麼會drop原表,並建立乙個空表來完成truncate,如果有外來鍵,那麼還是delete one by one。

如果配置了innodb_file_per_table選項,那麼會重用原來的表空間,但是如果有innodb plugin會自動釋放資源,如果沒有就不會自動釋放,只能通過呼叫alter table或者optimize table來釋放資源。

after 5.1.32

在read committed和read uncommitted的隔離級別下,採用statement或者mix的binlog模式,binlog中會記錄drop table和create table,這就相當於是ddl操作而不是dml操作。

after 5.5

版本5.5之後,均為先drop後create的操作方式。並且5.5之後會自動釋放資源,也就是在容量上可以看出來變少。

新增非空約束欄位在不同版本中的演進

開發提了乙個資料庫變更需求,新增一欄位,沒有not null非空約束,但有預設值為null。看起來有些奇怪,因為若欄位允許null,其預設值就是null,不用顯示宣告,可以建立乙個無default null的新增欄位再檢視desc表結構,就可以證明這點。基於這問題,引申出的not null欄位問題還...

怎麼在linux切換不同版本的python

最近因為裝pwndbg遇到了點問題,發現有些python庫匯入不了 查了下才發現pwndbg需要python版本為3.5 可是我做pwn題要用的pwntools是用python2的 所以我就查了一下怎麼在linux下共存不同的python版本 發現了乙個神器pyenv github 用這個工具可以很...

ubuntu在不同版本的cuda下切換

之前安裝了cuda8.0,cudnn5.1,現在同時想用另乙個版本,所以安裝兩個版本的cuda cudnn來回切換這樣就不用來回解除安裝安裝了。cd downloads安裝cuda sudo sh cuda 9.0.176 384.81 linux.run注意安裝過程中提示是否安裝驅動的時候選擇n,...