[求救] 一個典型的Transaction問題

看板Database作者時間15年前 (2009/06/07 10:42), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
我的需求是這樣的 有個table A 初始狀態是指有一筆為0的資料 之後會有多台電腦同時存取此table A 每次先 (1) query最後一筆資料得到一數 X (2) Y = X+1 (3) 新增 Y 至 table A 所以這table就會慢慢變大 而且資料是 '2', '3', '4', '5', '6', .... 一直新增至此table。 要實作此一功能 直覺想到的就是將(1)(2)(3)包在一transaction裡面: Begin Transaction (1) (2) (3) Commit Transaction 但根據我實際操作的結果 如果schedule如下 假設原先最後一筆資料是 X = 10 T1 T2 ------------------------------------------ BEGIN ------------------------------------------ (1) Read X = 10 ------------------------------------------ BEGIN ------------------------------------------ (1) Read X = 10 ------------------------------------------ (2) Y = X+1 = 11 ------------------------------------------ (2) Y = X+1 = 11 ------------------------------------------ (3) insert Y = 11 ------------------------------------------ COMMIT ------------------------------------------ (3) insert Y = 11 ------------------------------------------ COMMIT ------------------------------------------ 對於T2的commit, 本來以為會fail, 但竟然沒有! 不知道原因是甚麼? 是transaction本來就沒有預防這種RW conflict嗎? 還是需要做一些isolation level 的設定? 另外我想到的方法是用 TABLOCKX 但是不是access沒有啊? 因為我用 SELECT * from TableName with (TABLOCKX) 出現以下的訊息: "在 WITH OWNERACCESS OPTION 宣告中語法錯誤。" 不知道是甚麼原因呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.12.50

06/07 11:01, , 1F
which DB system
06/07 11:01, 1F

06/07 13:41, , 2F
目前用的是MS Access
06/07 13:41, 2F

08/03 00:13, , 3F
設定primary key吧
08/03 00:13, 3F
文章代碼(AID): #1AAoaT_H (Database)