使用存储过程并发访问MySQL数据库

usp*_*usp 12 mysql concurrency stored-procedures

我有一个存储过程,它将读取然后在数据库中递增一个值.许多程序同时使用这个特定的程序.我担心并发问题,特别是读写器问题.有人可以建议我任何可能的解决方案吗?

谢谢.

bob*_*olt 19

首先,如另一篇文章所述,使用InnoDB.它是MySQL 5.5的默认存储引擎,功能更强大.

其次,请看这个页面:http: //dev.mysql.com/doc/refman/5.5/en/innodb-locking-reads.html

您应该使用SELECT ... FOR UPDATE来阻止其他连接读取您要更新的行,直到您的事务完成为止:

START TRANSACTION;

SELECT value INTO @value
FROM mytable
WHERE id = 5
FOR UPDATE;

UPDATE mytable
SET value = value + 1
WHERE id = 5;

COMMIT;
Run Code Online (Sandbox Code Playgroud)

这比锁定表更好,因为InnoDB执行行级锁定.上面的事务只会锁定id = 5 ...的行,因此该查询不会阻止使用id = 10的另一个查询.


Imd*_*dad 0

使用Innodb。在存储过程中,在执行其他操作之前启动事务。在提交并结束事务时。这将解决读/写问题。

但请注意,它会减慢并发操作的速度。对于在给定时间预计只有几个并发请求的情况来说这是很好的。