ilovecomputer66 发表于 2024-3-18 10:41

为了防止多人同时修改数据库中一行数据,一般采用什么做法

具体是:比如一个表是汇总各个车间每日生产总数的,不同车间会生产相同的

具体字段为

id | 日期 |   零件A总产量 | 零件B总产量 | ………………

每天快下班前,由各个车间的管理员统计然后上传

首先,如果每个车间加上自己车间的数量时,都是updatea_count = a_count+ 具体产量   这样的SQL肯定不会冲突

但我想求知,如果不用这种方式,而就是update为具体数值,怎么避免冲突? 比如 今日原始产量都是0, 1车间生产A10个,B10个, 2车间生成A5个,B 5个

如果正常不冲突时,1车间先获取表中数据都是0,然后update加上自己变成 1010,然后2车间才打开软件,先获取现在产量是 10 10 ,然后加上自己的变 15 15 ,这是对的

但万一,它俩车间都打开软件,获取的初始都是0,然后这时 分别提交,那么后提交的肯定就把前面的覆盖了


——————————————
请问一般怎么解决,这个问题


我能想到的办法是如下的,不知道我这个办法就是大家实际使用的,还是我这个方法很山寨,请提供正常的嘴阀

我的做法
增加一个列,记录该条数据被修改的版本数(自增),提交时,SQL 语句 会whereversion = 之前自己加载数据时的,如果能修改,说明自己提交时,数据没别其他人改过,就可以直接改。否则不满足where修改不了任何一行,这时,客户端就可以主动获取最新version的数据,然后重新加上自己生产的进行提交

bhbhxy 发表于 2024-3-18 10:46

我一个外行都知道数据库可以lock

醉红尘0 发表于 2024-3-18 10:48

我一般是客户端上传的数据单独一个表(假定叫车间产量表),每次上传新增一条记录(可以设定每个车间每天只能新增一条记录,第二次及以后上传,更新已有记录)。然后总产量的表,用定时任务从车间产量表里面提取当天的数据统计后写入总产量的表中。

yk2014 发表于 2024-3-18 10:52

我的建议是不要弄总产量表,想要获取总数据时,直接获取每个表的数据,在软件中自己相加

jituidadada 发表于 2024-3-18 10:53

这个是乐观锁吧?

twshe 发表于 2024-3-18 10:53

不加一列吗?车间ID列

ilovecomputer66 发表于 2024-3-18 10:54

bhbhxy 发表于 2024-3-18 10:46
我一个外行都知道数据库可以lock

你在搞笑? 用户A 今天早上7点打开准备提交,就lock,然后他下班才提交。然后这期间,其他人都不能修改了额?

ilovecomputer66 发表于 2024-3-18 10:55

yk2014 发表于 2024-3-18 10:52
我的建议是不要弄总产量表,想要获取总数据时,直接获取每个表的数据,在软件中自己相加

我只是为了用个例子说明这个大致情况。但实际上不是这个例子,因为每天产生数据太巨量。所以,每次获取时统计,最终的花费时间,不被评审通过,所以,没用实时计算

鹏路翱翔 发表于 2024-3-18 10:56

用中间件,数据库内容发生改变,你要实时展示给每个用户,
用户修改内容的时候,也要进行鉴权,防止同时修改。

ilovecomputer66 发表于 2024-3-18 10:57

twshe 发表于 2024-3-18 10:53
不加一列吗?车间ID列

这是汇总表。有单独记录车间每日产量的。但汇总表实时相加耗时不符合要求,故每次都更新汇总表
页: [1] 2 3 4 5 6 7
查看完整版本: 为了防止多人同时修改数据库中一行数据,一般采用什么做法