小编Fly*_*man的帖子

在mysql中同步存储过程执行

我在mysql中有一个存储过程,用于执行需要同步的任务,这样如果两个应用程序调用存储过程,只有一个可以访问一段代码来执行任务,保持另一个被阻塞直到第一个一个完成任务.

DELIMITER $$
CREATE PROCEDURE SP_GEN_ID(IN NAME VARCHAR(20))

BEGIN 
  DECLARE maxLen int default 0;
START TRANSACTION;
   #the section of code that needs to be synchronized
COMMIT
END;
$$

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

因此,如果两个应用程序同时调用存储过程,则必须同步任务.

一个.但是启动TRANSACTIONCOMMIT没有同步执行.

湾 并且LOCK TABLES tableA不能用于存储过程以确保同步.

C.我试图在应用程序级别同步存储过程调用.我用了

boost_interprocess scoped_lock lock();

它在1.41升级中运行得非常好

但是boost 1.34库不支持进程间锁定互斥锁,这是我的情况.

有没有办法同步代码的存储过程部分,以便在同时进行两次调用时,一个在另一个执行之前被阻塞?

(添加以下内容)编辑的代码:了解我在存储过程的synchronized块中尝试执行的操作.

它获取最后分配的id,并将其递增1并检查它是否未用于其他"名称"记录.找到有效的id后,更新最后分配的id记录表,然后将其与给定的"name"相关联.

DELIMITER $$
CREATE PROCEDURE SP_GEN_ID(IN NAME VARCHAR(20))

BEGIN 
  DECLARE maxLen int default 0;
START TRANSACTION;
   #the section of code that needs to be synchronized
    SELECT lastid into …
Run Code Online (Sandbox Code Playgroud)

mysql synchronization stored-procedures locking boost-interprocess

8
推荐指数
2
解决办法
1万
查看次数