mysql - 是否可以锁定表以插入所选值

标签 mysql

我想锁定一个表,这样当其他线程正在处理这些行集时,其他线程就不能插入任何带有(例如)user_id = 5 的行。 虽然我可以锁定整个表,但这似乎太多并且会减少并发性。

我的线程正在执行以下操作,并且其中有很多线程同时运行。

Start Transaction
1) insert row with user_id=val
2) if (count (*) >= 2) where user_id = val and some other conditions then do "something"
COMMIT

现在,如果 2 个线程并行运行,那么它们可能都会得到 count(*) = 1,但是当它们都提交时,总行数是 2,这应该已经完成​​了“某事”

我的想法是,我需要在每个事务中锁定 user_id=val 的行,以便在我的事务完成之前没有人可以插入 user_id = val。

有没有办法使用 MySQL 和 Hibernate 来实现这一点。

最佳答案

使用锁定读取。

从表中选择 COUNT(*),其中 user_id = val 用于更新。

将锁定匹配的行直到事务结束。

http://dev.mysql.com/doc/refman/5.5/en/innodb-locking-reads.html

关于mysql - 是否可以锁定表以插入所选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402467/

相关文章:

python - 在 AWS 中提供大文件服务

mysql - 优化超过百万条记录的表的mysql更新

mysql - 我可以在表达式映射文件中添加 SQL 查询吗?

MySQL 连接禁用词表

php - 远程访问EC2上的mysql

MySQL - 将字段连接到 append 字段

MySQL 客户端历史记录未记录某些查询

mysql - rails (ActiveRecord) : Last select overrides previous

php - 使用 PHP 将调查插入 SQL 数据库

php - WordPress:跨 2 个数据库共享用户表