-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)供您参考。请指导我。谢谢 –

相关问题