我需要编写一个执行多个查询/逻辑的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个进程使用它直到第一个运行过程完成执行?