Mysql insert 自增 id 表,如何进行回滚语句生成 30

请问如果对一个有自增主键的表t进行一个批量的Mysql操作,例如insertintot(col2,col3)values(1,1),(2,2),(3,3);但是在并发的情... 请问 如果对一个有自增主键的表 t 进行一个批量的 Mysql 操作,
例如 insert into t (col2,col3) values (1,1),(2,2),(3,3);
但是在并发的情况下在插入的时间有可能有其他人操作这个表写入,导致自增改变,无法根据查询自增ID来进行判断。
如何才能生成对应的回滚语句,仅删除掉这部分新增的值,等同根据ID删除。

当前遇到问题
1、若根据条件去生成回滚语句,可能把历史的 (1,1) (2,2) 的数据删除掉了 例如:delete from t where col2 = 1;
2、若根据主键去回滚,在操作时候主键ID可能会已经被其他事务插入数据导致自增ID值已变大,无法精确定位到新增数据对应的ID
展开
 我来答
rokerker
2019-06-27 · TA获得超过201个赞
知道小有建树答主
回答量:698
采纳率:60%
帮助的人:172万
展开全部
两个办法。
第一是你批量插入的数据要么全部成功,要么全部失败,不需要顾及部分成功的时候回滚存在所谓的误删。意思就是说(1,1),(2,2),(3,3) 三个插入,要不就都进去了,要不都不要进去;只要考虑直接rollback就行了;
第二个办法是你自己控制写入的主键值,维护一个主键的序列,每次插入之前先去序列里面申请一个值,即使并发的时候也要这么做,从机器角度来讲,真正在毫秒级别上的并发也能被识别出来;确保了每组写入的主键不同,失败的时候就知道到底是哪个主键对应的插入失败了。就是类似于使用oracle的sequence值来做主键。
追问
mysql 是自带 auto_increment 功能,也就是自增的,当前就是纠结在如何有其他并发写入的情况下获取到这部分插入的ID值~~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式