MySql 的行数并插入到计数的表中
Posted
技术标签:
【中文标题】MySql 的行数并插入到计数的表中【英文标题】:MySql count of rows and insert into the table that count 【发布时间】: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:我假设您从一张表中读取并写入另一张表。 【参考方案1】:为什么不在一个查询中完成:
insert into tbl(id, name, branchid, count)
select 5, 'abcd', 1, count(*)
from from tbl
where branchid = 1;
【讨论】:
谢谢试一试以上是关于MySql 的行数并插入到计数的表中的主要内容,如果未能解决你的问题,请参考以下文章
java对mysql进行批处理插入数据,如何返回错误的没插入数据