Java MySql统计行数并插入到统计的表中
我有一个场景,需要计算mysql表中当前分支的行数(在该表中,我们是存储分支),并将包含其他详细信息的行数插入同一个表中。但问题是,当两个或多个并发用户试图同时从同一分支插入时,所有用户的计数都是相同的,但对我来说,在我读取计数并插入一个用户请求之前,其他用户的插入不应该发生。是否有任何方法可以锁定此项,并且任何示例都会有所帮助(我只需要在MySql存储过程中执行此操作) 编辑:对不起,我不能分享工作代码,但我可以在这里写例子 我的桌子结构在这里Java MySql统计行数并插入到统计的表中,java,mysql,jdbc,spring-jdbc,jdbctemplate,Java,Mysql,Jdbc,Spring Jdbc,Jdbctemplate,我有一个场景,需要计算mysql表中当前分支的行数(在该表中,我们是存储分支),并将包含其他详细信息的行数插入同一个表中。但问题是,当两个或多个并发用户试图同时从同一分支插入时,所有用户的计数都是相同的,但对我来说,在我读取计数并插入一个用户请求之前,其他用户的插入不应该发生。是否有任何方法可以锁定此项,并且任何示例都会有所帮助(我只需要在MySql存储过程中执行此操作) 编辑:对不起,我不能分享工作代码,但我可以在这里写例子 我的桌子结构在这里 id name branchid
id name branchid count
1 abc 1 1
2 xyz 1 2
3 abcd 2 1
4 wxyz 2 2
这里我从上表中为给定的分支(ex:1)计算行数,并插入具有该计算计数的行
例:
后来
如果只有一个用户从一个分支访问此功能,但如果来自同一分支的多个用户尝试在同一时间访问此功能,则此功能非常有效
@count
正在为分支用户进行复制。为什么不在一个查询中执行此操作:
insert into tbl(id, name, branchid, count)
select 5, 'abcd', 1, count(*)
from from tbl
where branchid = 1;
请提供一份报告。我们不能在黑暗中工作。@KIKOSoftware编辑了我的问题您可以在存储计数之前锁定读取的表格。这样,任何第二个用户,想要做同样的计算,必须等待第一个用户完成。我可以这样做吗?因为在锁定表进行读取时,它是否允许我写入并在写入后释放锁?是的,您可以锁定一个表,甚至多个表。但一定要检查数据库引擎是否支持它。例如,InnoDB就是这样。附言:我假设你从一张桌子上读东西,然后写信给另一张桌子。谢谢你会尝试一下的
@count
insert into tbl(id, name, branchid, count)
select 5, 'abcd', 1, count(*)
from from tbl
where branchid = 1;