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的另一个查询.
使用Innodb。在存储过程中,在执行其他操作之前启动事务。在提交并结束事务时。这将解决读/写问题。
但请注意,它会减慢并发操作的速度。对于在给定时间预计只有几个并发请求的情况来说这是很好的。
归档时间: |
|
查看次数: |
12838 次 |
最近记录: |