可以
CREATE TABLE MyTable (ID int not null, TextValue nvarchar(1000) not null); INSERT INTO MyTable VALUES (1, 'One'); INSERT INTO MyTable VALUES (2, 'Two'); INSERT INTO MyTable VALUES (3, 'Three'); INSERT INTO MyTable VALUES (4, 'Four'); SELECT * FROM MyTable GO
BEGIN TRAN TRUNCATE TABLE MyTable SELECT * FROM MyTable ROLLBACK TRAN SELECT * FROM MyTable GO
BEGIN TRAN delete MyTable where 1=1 SELECT * FROM MyTable ROLLBACK TRAN SELECT * FROM MyTable GO
db<>fiddle here
transaction 就是為了保護資料完整性。一但發生回滾事件,就會還原的作用。
不過你也算問到了重點了。確實有某些指令會直接算commit,就算發生ROLLBACK事件也不會還原。
大多數只要不是處理到資料的指令,大都不會發生ROLLBACK。
如建表建庫的指令。就算回滾了它還是會存在。不會直接刪除。
以上為MYSQL的部份。為何我會這樣說的原因是因為
暐翰的範例中有使用到TRUNCATE的語法。依其MYSQL的官方說明來看。該指令其實是不會回滾的沒錯。我早期確實也曾經用過TRUNCATE跑事務沒有還原的情況發生。
但暐翰的範例確實是有還原回來的。所以我也不清楚該給你的答案是可以還是不可以。
正常來說依照我的經驗還有官方的案例是不可以的才對。
那我就只能猜暐翰的範例可能是MSSQL。搞不好MSSQL是可以還原的。
TRUNCATE對Table破壞又立即還原的需求是什麼?? 萬一這個表是個big Table, 你可能會影響到整個DB SERVER.