0

我有一个网站,它有一个方法(在支持 bean 中),它执行几个 READ 请求(例如检查用户的权限),然后插入一些数据。

程序看起来像这样:

1.) SELECT * FROM userLocks (table which logs the users which are exclusively working on a topic, to avoid redundancy). it checks if there is currently no lock (user working) for the topic.
2.) SELECT * FROM ... (some other selects for further checking)
3.) INSERT INTO userLocks (curUser, timeout) values (...) (if everything was ok, create a new lock for the current user for the topic)

我现在面临的问题是:在第一次选择和插入之间,许多其他用户可以请求操纵表 userLocks 数据的同一网站。它似乎不是线程安全的。

这个问题有解决方案吗?我只需要在此过程中为其他用户锁定所有使用过的表。(另一个请求应该等到锁被释放,这不会超过半秒......)

(我使用 InnoDB)

4

1 回答 1

0

我建议您需要稍微研究一下 SQL 事务以及 InnoDB 的行和表锁。这是一篇帮助我的文章https://blogs.oracle.com/mysqlinnodb/entry/introduction_to_transaction_locks_in

于 2013-10-07T12:24:17.593 回答