→ lyforever:加上timestamp判斷? 09/26 16:47
→ itisjoe:訂單編號應該是primary key吧 加上auto_increment屬性試試 09/26 16:56
用年月日加上流水序號的訂單編號也能使用嗎?
→ rickysu:下了 transaction 並不代表一定沒問題。 09/26 17:16
不代表沒問題?但這部份真的不能出錯,無論怎麼作都無法防嗎?
※ 編輯: stony1990 來自: 36.231.85.179 (09/26 17:23)
※ 編輯: stony1990 來自: 36.231.85.179 (09/26 17:24)
※ 編輯: stony1990 來自: 36.231.85.179 (09/26 17:25)
→ rickysu:印象中Mysql預設交易層級不是SERIALIZABLE。有可能會發生 09/26 18:05
→ rickysu:上面提到的幾種例外狀況,請善用 SET TRANSACTION。 09/26 18:06
→ rickysu:變更交易層級。 09/26 18:07
→ rickysu:總之 SET TRANSACTION SERIALIZABLE。就沒問題拉。 09/26 18:07
意思是在下QUERY語句的時候下START TRANSACTION這樣嗎?
※ 編輯: stony1990 來自: 36.231.85.179 (09/26 18:47)
→ xxxzzz:mysql隔離層級預設是REPEATABLE READ 09/26 23:10
→ xxxzzz:或是你改用SELECT ... FROM ... LOCK IN SHARE MODE 09/26 23:11
→ xxxzzz:我想了一下,你應該是要select最大編號的時候排它 09/26 23:36
→ xxxzzz:交易過程,用 SELECT ... FROM ... FOR UPDATE 試看看 09/26 23:37
→ chenlarry:一般都是用FOR UPDATE去lock table,避免別人同時寫入 09/27 00:25
請問一下,for update不是更新嗎?但我連insert資料時的同步也能解決嗎?
我的疑問是,還沒insert怎麼update呢?
※ 編輯: stony1990 來自: 36.231.85.179 (09/27 09:40)
→ xxxzzz:select...for update,是將資料列加排它鎖,避免交易期間 09/27 23:34
→ xxxzzz:其他連線使用select..for update、select..lock in share 09/27 23:36
→ xxxzzz: mode 讀取鎖定的資料列 09/27 23:37
→ xxxzzz:但須注意,若用普通的 select ... 還是可以讀取 09/27 23:37
→ xxxzzz:剛想到,不用交易的話,用GET_LOCK、RELEASE_LOCK也是可以 09/27 23:42
→ chenlarry:當你下select .. for update的時候,如果沒有明確指定 09/28 00:51
→ chenlarry:row,就會鎖住整個table,這時候別人都不能對這張table 09/28 00:52
→ chenlarry:做任何修改,只有下for update的人可以修改,當你update 09/28 00:52
→ chenlarry:之後,這個鎖就會解開,這樣就可以避免別人同時修改資料 09/28 00:53