truncate與delete的區(qū)別

刪 除 數(shù) 據(jù)
刪除表中數(shù)據(jù)的方法有兩種,在指定的表或視圖中刪除滿足給定條件的數(shù)據(jù)可以使用DELETE語(yǔ)句;如果要清除表中全部數(shù)據(jù),則還可以使用TRUNCATE TABLE語(yǔ)句.DELETE語(yǔ)句的語(yǔ)法如下.
命令格式:
DELETE[ FROM ] { table_name | view_name }
[ FROM { }]
[ WHERE ]
命令說(shuō)明:
(1)DELETE語(yǔ)句中的語(yǔ)法項(xiàng)目含義與UPDATE語(yǔ)句相同.
(2)WHERE子句給出刪除數(shù)據(jù)所必須滿足的條件,省略WHERE子句時(shí)將刪除所有數(shù)據(jù).
TRUNCATE TABLE語(yǔ)句用于清空表中所有數(shù)據(jù),語(yǔ)法如下.
命令格式:
TRUNCATE TABLE table_name
TRUNCATE TABLE table_name與DELETE table_name都可以刪除表中全部記錄.
二者的相同點(diǎn)是都不刪除表的結(jié)構(gòu),索引,約束,規(guī)則和默認(rèn),如果希望刪除表的定義,必須使用DROP TABLE語(yǔ)句.TRUNCATE TABLE語(yǔ)句與DELETE語(yǔ)句的區(qū)別是,如果表中含有自動(dòng)編號(hào)列,則使用TRUNCATE TABLE語(yǔ)句后,該列將復(fù)位為其初始seed值(經(jīng)本人驗(yàn)證通過(guò)SEQUENCE和TRIGGER實(shí)現(xiàn)的自動(dòng)增加列是無(wú)法回復(fù)到SEQUENCE的初始值的,給大家?guī)?lái)的誤解,深表歉意),而使用DELETE語(yǔ)句將不會(huì)復(fù)位.另外,使用TRUNCATE TABLE語(yǔ)句不記錄日志,而DELETE語(yǔ)句每刪除一條記錄,都要記入日志,因此TRUNCATE TABLE語(yǔ)句的操作速度要快于DELETE語(yǔ)句.
----------------------------------------------------------------------------------------------------------------------------------
普通方法:delete   from   tablename   where...
快速刪除表中所有記錄   truncate   table   tablename
但后者不觸發(fā)表delete觸發(fā)器,所在的刪除動(dòng)作不能事務(wù)回滾

經(jīng)本人驗(yàn)證通過(guò)SEQUENCE和TRIGGER實(shí)現(xiàn)的自動(dòng)增加列是無(wú)法回復(fù)到SEQUENCE的初始值的,給大家?guī)?lái)的誤解,深表歉意



開(kāi)心過(guò)好每一天。。。。。