Dot-Net
事務中的 LAST_INSERT_ID() 是否可靠?
我正在使用 mysql/ado.net/C# 繼承我的問題,我知道 mysql 是並發的,但是我有文件數據(縮略圖名稱)和 db 數據(行)要同步。
如果我開始交易並且由於任何原因失敗,這會是一個問題嗎?如果我讓這段程式碼在兩個核心上同時執行,它們會互相破壞嗎?我基本上需要知道 1) last_insert_id 是否可靠而不改變。2)如果一個事務使用所述rowid,那麼另一個事務將不會使用它。
start transaction insert statement, however i dont want it to be active yet; select LAST_INSERT_ID() File.Delete(lastid)//may exist from a transaction that failed File.Move(thumbImage, lastid) transaction.commit()//ok done這安全嗎?為什麼或者為什麼不?
MySQL 的 last_insert_id() 是可靠的,因為它始終是特定連接執行的最後插入。它不會報告由其他連接創建的插入 ID,也不會報告您在兩個連接之前執行的插入。實際插入發生在哪個 cpu 核心上以及處理 last_insert_id() 呼叫的核心都無關緊要。它始終是該連接的正確 ID 號。
如果您回滾執行插入的事務,last_insert_id() 仍將報告該新 id,即使它不再存在。但是,在隨後的插入中,該 ID 不會被重用