Transactions 即使在使用可重复读取事务时,也要创建多个相同的行

Transactions 即使在使用可重复读取事务时,也要创建多个相同的行,transactions,locking,mariadb,isolation-level,Transactions,Locking,Mariadb,Isolation Level,我有一个带有MariaDB服务器的nodejs web服务,我的应用程序中每天有大约500个活跃用户 在我的代码中,我使用如下事务: START TRANSACTION -- select to find out the existence of a row -- -- if the row doesn't exist, a new row inserted -- COMMIT 此事务处理不会导致插入重复的行,但不会。 我认为,当两个具有不同会话的请求同时到达并且看到该行不存在时,就会发生

我有一个带有MariaDB服务器的nodejs web服务,我的应用程序中每天有大约500个活跃用户

在我的代码中,我使用如下事务:

START TRANSACTION

-- select to find out the existence of a row --
-- if the row doesn't exist, a new row inserted --

COMMIT
此事务处理不会导致插入重复的行,但不会。
我认为,当两个具有不同会话的请求同时到达并且看到该行不存在时,就会发生这种情况,然后两个会话都将其插入

MariaDB事务隔离级别是可重复读取的

这是因为可重复读取隔离级别吗


当另一个会话可能读取同一行时,如何以独占方式锁定读写操作?

相反,请执行以下操作之一,其中任何一个都是“原子”的,不需要在其周围执行
BEGIN/COMMIT
,除非同一事务中有其他语句:

INSERT IGNORE ...;

INSERT ... ON DUPLICATE KEY UPDATE ...;

要解释我们的代码的错误:您应该在
选择
上选择
更新
,而是执行其中一项操作,这两项操作都是“原子”的,不需要
开始/提交
,除非同一事务中有其他语句:

INSERT IGNORE ...;

INSERT ... ON DUPLICATE KEY UPDATE ...;
要解释我们的代码有什么问题:您应该在
上选择
以更新