我正在尝试使用VB.NET编写多线程程序。这是一个简单的程序:进入数据库,获取一行,处理一些后端,然后更新该行并将其设置为“ processed = true”。因为数据太多,所以我打算为此做一个多线程程序。
SELECT ... FOR UPDATE出于某种奇怪的原因在事务中似乎不起作用,因此我决定先占先将行标记为“正在读取= TRUE”,然后从那里进行处理。
是否可以更新行,然后从同一SQL语句检索行ID?
我尝试一起使用这些SQL语句:
Dim sqlUpdateStatement As String = "SET @uid := 0;UPDATE process_data SET reading = TRUE, idprocess_data = (SELECT @uid := idcrawl_data) WHERE reading IS NOT TRUE AND processed IS NOT TRUE LIMIT 1;SELECT @uid;"
但是它告诉我在命令执行过程中遇到了致命错误。
有什么想法吗?
编辑
经过一些测试,我得出的结论是,在VB.Net中执行更新时不能使用MySQL变量。这是真的?如果是这样,是否有解决方法?
答案 0 :(得分:0)
我最终花时间调试代码的SELECT FOR UPDATE部分,以使其在Transaction的基础上工作。谢谢大家的宝贵时间!