Transactions 即使在使用可重复读取事务时,也要创建多个相同的行
我有一个带有MariaDB服务器的nodejs web服务,我的应用程序中每天有大约500个活跃用户 在我的代码中,我使用如下事务: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 此事务处理不会导致插入重复的行,但不会。 我认为,当两个具有不同会话的请求同时到达并且看到该行不存在时,就会发生
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 ...;
要解释我们的代码有什么问题:您应该在上选择以更新