-1

我從我的網站向我的用戶發送批量邀請。爲此,我將包含電子郵件的逗號分隔字符串傳遞給我在mysql中的存儲過程。在這個存儲過程中,一個while循環解析每個電子郵件(使用substring()以逗號分隔)並檢查現有數據庫,然後檢查是否存在,如果該電子郵件已存在,則使用guid生成電子郵件鏈接。該過程對於小批量(例如,低於200-250個電子郵件)工作正常,但如果批量較大(超過250個電子郵件),則整個過程問題和下一個請求會導致死鎖錯誤(原始錯誤是:「嘗試獲取鎖定;嘗試重新啓動事務「)。所以,我打算在我的javascript或c#文件(編程語言文件)上做一個while循環,並將每封電子郵件發送到存儲過程。 在上面的場景中,mysql連接的數量會增加,最大連接錯誤可能會發生。嘗試鎖定時發現死鎖;嘗試重新啓動交易

所以,我想問一下,用mysql做這種工作的最好方法是什麼?

回答

0

我認爲給電子郵件程序一次是正確的解決方案,但你不需要爲每個項目建立新的連接或甚至新的請求。大多數語言支持準備好的語句執行(and here's the answer on how to use them in C#)。

死鎖反過來可能是由您自己的代碼造成的,但是沒有剪切它很難說。也許你的程序不可重入或可以從其他位置訪問數據。

+0

感謝@kworr,但它執行得非常慢,並且它爲死鎖拋出錯誤。 –

+0

實際上準備好的語句比常規語句快得多,因爲您不需要每次都解析SQL。它可以更快,然後分裂整個字符串在MySQL中。 – kworr

+0

我已經發布了另一篇文章(http://stackoverflow.com/questions/19091968/deadlock-found-when-trying-to-get-lock-try-restarting-transaction-2nd-try)供您參考。請指導我。謝謝 –

相關問題