如何防止2个MySQL进程同时更新同一个表?

时间:2015-08-20 21:49:11

标签: mysql sql stored-procedures locking

我需要编写一个执行多个查询/逻辑的MySQL存储过程。但是,此过程中使用的表也由其他存储过程使用。我需要阻止这两个过程在执行过程中读/写到同一个表。

我需要以某种方式锁定共享表,以便在锁定过程解锁之前没有其他过程可以使用它。

此外,程序中还涉及其他表,我根本不想锁定。锁应该放在一些桌子而不是所有桌子上。我的所有表都使用InnoDB存储引擎。

这是我试过的

DELIMITER $$
CREATE PROCEDURE `sp_test` ()
BEGIN

SET autocommit = 0;
LOCK TABLES db.table WRITE, db.table READ;

START TRANSACTION;
END
... Query 1 SELECT * FROM table1...
... Query 2 UPDATE table1...
... Query 3 INSERT INTO table1...
... Query 4 INSERT INTO table1...
... Query 5 UPDATE table1...
... CALL db.pro1; -- this second procedure makes updated to table1
... Query 6 SELECT * FROM table1...

COMMIT;
UNLOCK TABLES;

但是这给了我以下错误

  

错误1314:存储过程中不允许LOCK

如何在存储过程中锁定共享表,以防止2个进程使用它直到第一个运行过程完成执行?

0 个答案:

没有答案