-
1 # java程式設計師小白
-
2 # 喬喬
TRUNCATE和DELETE有以下幾點區別
1、TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會被撤銷。
2、TRUNCATE是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。
3、TRUNCATE將重新設定高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作後的表比DELETE操作後的表要快得多。
4、TRUNCATE不能觸發任何DELETE觸發器。
5、不能授予任何人清空他人的表的許可權。
6、當表被清空後表和表的索引講重新設定成初始大小,而delete則不能。
7、不能清空父表。
資料庫操作
使用方法:
truncate table table_name;
操作特性:
truncate 使ddl操作立即生效,原資料不放到rollback segment中,不能回滾,操作不觸發trigger;
truncate 語句預設情況下將空間釋放到 minextents個 extent,除非使用reuse storage;
truncate 會將高水線復位(回到最開始)。
擷取字串
smarty truncate 擷取
從字串開始處擷取某長度的字元.預設是80個。
你也可以指定第二個引數作為追加在擷取字串後面的文字字串.該追加字串被計算在擷取長度中。
預設情況下,smarty會擷取到一個詞的末尾。
如果你想要精確的擷取多少個字元,把第三個引數改為"true" 。
例 擷取:
index.php:
$smarty = new Smarty;
$smarty->assign("articleTitle", "Two Sisters Reunite after Eighteen Years at Checkout Counter.");
$smarty->display("index.tpl");
index.tpl:
{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
輸出結果:
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...
回覆列表
1、表和索引所佔空間。當表被truncate 後,這個表和索引所佔用的空間會恢復到初始大小,delete操作不會減少表或索引所佔用的空間。
2、應用範圍。truncate 只能對table;delete可以是table和view。
4、delete語句為dml(data maintain language),這個操作會被放到 rollback segment中,事務提交後才生效。如果有相應的 tigger,執行的時候將被觸發。truncate是dll(data define language),操作立即生效,原資料不放到 rollback segment中,不能回滾。
5、在沒有備份情況下,謹慎使用 truncate。要刪除部分資料行採用delete且注意結合where來約束影響範圍。回滾段要足夠大。若想保留表而將表中資料刪除,如果於事務無關,用truncate即可實現。如果和事務有關,或老是想觸發trigger,還是用delete。
6、truncate table 表名 速度快,而且效率高,因為: