MYSQL“ SELECT ... FOR UPDATE”锁表不起作用

时间:2019-08-01 06:56:46

标签: c# mysql asp.net .net vb.net

在解释问题之前,我先让您陷入困境。

我有两台服务器,一台用于我的网站,另一台用于MySQL中的数据库。

网络连接到MySQL并使用其数据运行。

每个首次打开网络的用户都被分配了一个唯一的ID,但是很多时候这些ID被重复并且同一ID被分配给不同的用户。

我通过称为“ my_block_ids”的MySQL表的Web的VB.net代码获取这些ID,该表具有以下字段:“ id”,“ year”和“ type”。

我用来获取要分配给用户的ID并锁定表,直到使用以下要分配的ID对其进行修改的代码如下:

Dim id As Integer = 0

Dim sSQL As String = "START TRANSACTION;"

sSQL &= "SELECT id FROM my_block_ids WHERE year = 2019 AND type=3 FOR UPDATE;"

id = DB.Value(sSQL)

sSQL = "UPDATE my_block_ids Set id=id+1 WHERE year = 2019 And type=3 And id=" & id.ToString & "; COMMIT;"

我检测到的问题是MySQL检测到所有请求都来自相同的应用程序/程序,并且没有使用“ SELECT ... FOR UPDATE”语句多次向不同的用户分配相同的ID来阻塞该表。

如果有人能给我解决问题的方法,我将不胜感激。

0 个答案:

没有答案