作者alexcwtzeng (狂泻不止)
看板Database
标题Re: [SQL ] 请问删除语法中的truncate和delete 有ꐠ…
时间Thu Aug 30 12:04:16 2007
※ 引述《ruby0104 (:))》之铭言:
: ※ 引述《alexcwtzeng (狂泻不止)》之铭言:
: : delete 可以 rollback,truncate 不行
: : delete 可以加 where 条件,truncate 不行
: delete 跟 truncate 都可以rollback
: 提外话,这个问题面试的时候 还挺常问的 XD
Oracle SQL 的说明
http://psoug.org/reference/truncate.html
SQL-Server 的说明也很多,说明了 TRUNCATE table 如何 rollback
==== Example =====
USE tempdb
CREATE TABLE t (c1 INT)
INSERT INTO t
SELECT BINARY_CHECKSUM(OrderID) FROM Northwind..Orders
SELECT * FROM t
BEGIN TRAN
TRUNCATE TABLE t
COMMIT TRAN
SELECT * FROM t
INSERT INTO t
SELECT BINARY_CHECKSUM(OrderID) FROM Northwind..Orders
BEGIN TRAN
TRUNCATE TABLE t
ROLLBACK TRAN
SELECT * FROM t
DROP TABLE t
==== End Example ====
所以在 begin tran ... end tran 的 block 里,所有的东西都可以 rollback。
但这是网路文章,我只是引述。SQL-Server 偶不会。
但是 Oracle Database 中,truncate table 与 delete table 是很大的不一样滴。
在 ANSI/ISO standard 中说明 DDL 是属於 autocommit 的指令。
而 truncate 是属於 DDL 的指令。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.125.179.204
1F:推 PsMonkey:糟糕,越来越不知道要怎麽收了 T__T 08/30 12:10