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进行批处理插入数据,如何返回错误的没插入数据

计算另一张工作表中的行数并应用公式

Gravity Forms使用JS统计List中的行数并返回字段?

两个动态创建的表中行的相等高度,使用JQuery

插入大查询表的行数少于预期

MySQL必知必会--汇 总 数 据