我目前正在nodejs的一个项目中工作,该项目有一个到Mysql DB的池连接(同时打开了大约10个连接)。现在,我希望能够使用连接来更新数据库中的表,如下所示:
update table set tries=tries+1 where condition=value;我的问题是,在这种方法的所有连接之间,不可能出现竞争条件?因为我在互联网上查找,发现我的SQL中的“事务”将导致多个数据库连接之间的竞争条件。
谢谢
发布于 2021-11-11 07:52:33
将事务的隔离级别设置为可序列化。在更新的情况下,使用乐观锁定。用StoredProcedure编写这些代码。
DECLARE V_ERR_OCCURED BOOLEAN;
DECLARE V_ERR_MESSAGE VARCHAR(500);
SET V_ERR_OCCURED=FALSE;
SET V_ERR_MESSAGE=SPACE(0);
SET V_ERR_MESSAGE='Transaction Error';
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SET V_ERR_OCCURED=TRUE;
SET AUTOCOMMIT=0;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
# Your Update Statements
IF V_ERR_OCCURED=TRUE THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
SET AUTOCOMMIT=1;
END;https://stackoverflow.com/questions/69924336
复制相似问题