【发布时间】:2018-07-28 05:57:48
【问题描述】:
我有一个场景,我需要为当前分支计算 mysql 表中的行数(在该表中我们是存储分支),并将行数与其他详细信息插入同一个表中。但问题是当两个或更多并发用户尝试同时从同一个分支插入时,所有用户的计数都是相同的,但对我来说,插入不应该为其他用户带来快乐,直到我读到计数并插入该用户请求。有什么方法可以为此锁定工作吗?任何示例都会有所帮助(我需要在 MySql 存储过程中执行此操作)
编辑:对不起,我不能分享工作代码,但我可以在这里写例子
我的表结构在这里
id name branchid count
1 abc 1 1
2 xyz 1 2
3 abcd 2 1
4 wxyz 2 2
这里从上表中计算给定分支的行数(例如:1)并插入具有该计算计数的行
例如:
set @count = (select count(id) from tbl where branchid = 1);
稍后
insert into tbl(id, name, branchid, count)
values(5, 'abcd', 1, @count)
如果只有 一个用户从一个分支访问它,但如果来自同一分支的多个用户尝试在完全相同的时间访问它,则此功能非常有用
@count
正在为分支用户复制。
【问题讨论】:
-
请提供Minimal, Complete, and Verifiable example。我们不能在黑暗中工作。
-
@KIKOSoftware 编辑了我的问题
-
您可以锁定您读取的表,直到您存储了计数。这样,任何第二个用户想要进行相同的计算,都必须等待第一个用户完成。
-
我可以这样做吗?因为在锁定表以供读取时,它是否允许我在写入后写入和释放锁?
-
是的,您可以锁定一个表,甚至多个表。但是请检查您的数据库引擎是否支持它。例如,InnoDB 就是这样做的。 PS:我假设您从一张表中读取并写入另一张表。
标签: java mysql jdbc spring-jdbc jdbctemplate