mysql存储过程 多线程_解决多线程调用sql存储过程问题

在多线程应用中,由于并发插入可能导致数据错乱问题。本文提出了两种解决方案:1) 使用`WITH (LOCK)`确保插入时的独占访问;2) 创建MAX_OID表维护自增ID,在事务中完成批量插入与更新。DBA推荐第二种方案,通过读取MAX_OID表,计算新最大ID,并在事务中更新,保证了线程安全和数据一致性。
摘要由CSDN通过智能技术生成

场景:

我们程序现在改成多线程了,我现在需要把临时表中的数据给插入到TABLE_M中,但这时候可能其他的线程也在插入,我就不能用之前我们的方案了(select max(oid) from Tuning.TABLE_M。。。,之后去维护主子表关系,改掉TABLE_M的OID的自增属性,插入,之后再添加上自增属性。。。。。。)

我现在是想这样操作:

1,)先插入把临时数据插入到TABLE_M(OID是自增的)中(Insert Into ….select …),我之后获取 select Scope_Identity() as @MaxTABLE_MOID,之后根据这个@MaxTABLE_MOID去修改临时表中的TABLE_MOID.

1.1,)(1,)这种方案会不会出现以下问题:

A线程, 1-10 共10条记录,

B 线程,1-10 共10条记录

A线程插入的时候,

B线程也在再插入

A线程 与 B线程是交互的插入,A线程插入一条,B线程插入一条

运行起来像这样:

比如 此时TABLE_M的OID为 100

A线程插入第一条 TABLE_M的OID变为 101

B线程插入第一条 TABLE_M的OID变为 102

当我A线程插入完的时候,我A线程最后一条记录插入的OID为 120

这时候我的Temp 要到这个120 去修改字表关系

TABLE_M(OID=120) 是A 插入的没问题

TABLE_M(OID=119)是B插入的,这时却关联到了A线程对应的临时表的第9条记录

悲哀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值