iT邦幫忙

0

交易 transaction 中可否 delete 或 truncate table ?

小弟新手,想請問:

交易 transaction 中可否 delete table 內資料 或 truncate table (清空table內所有資料) ? 謝謝!

kcc8874 iT邦新手 5 級 ‧ 2019-09-26 17:29:39 檢舉
沒問題~ 是OK的唷!!!
4
暐翰
iT邦大師 1 級 ‧ 2019-09-25 17:17:28

可以

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

https://ithelp.ithome.com.tw/upload/images/20190925/201059883CtkcL9qKj.png

小魚 iT邦大師 1 級 ‧ 2019-09-25 18:13:16 檢舉

話說這種問題不是自己做看看就知道了嗎?

0
浩瀚星空
iT邦大師 1 級 ‧ 2019-09-25 23:20:36

transaction 就是為了保護資料完整性。一但發生回滾事件,就會還原的作用。
不過你也算問到了重點了。確實有某些指令會直接算commit,就算發生ROLLBACK事件也不會還原。

大多數只要不是處理到資料的指令,大都不會發生ROLLBACK。
如建表建庫的指令。就算回滾了它還是會存在。不會直接刪除。

以上為MYSQL的部份。為何我會這樣說的原因是因為
暐翰的範例中有使用到TRUNCATE的語法。依其MYSQL的官方說明來看。該指令其實是不會回滾的沒錯。我早期確實也曾經用過TRUNCATE跑事務沒有還原的情況發生。

但暐翰的範例確實是有還原回來的。所以我也不清楚該給你的答案是可以還是不可以。
正常來說依照我的經驗還有官方的案例是不可以的才對。
那我就只能猜暐翰的範例可能是MSSQL。搞不好MSSQL是可以還原的。

0
fuzzylee1688
iT邦新手 1 級 ‧ 2019-09-26 09:06:18

TRUNCATE對Table破壞又立即還原的需求是什麼?? 萬一這個表是個big Table, 你可能會影響到整個DB SERVER.

我要發表回答

立即登入回答