首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在事务中发生错误,对表的id索引有什么影响吗?

如果在事务中发生错误,对表的id索引有什么影响吗?
EN

Stack Overflow用户
提问于 2019-03-28 11:05:03
回答 1查看 29关注 0票数 0

以下是我在YII1.1中的主要交易代码:

代码语言:javascript
复制
try{
     $transaction=Yii::app()->projectdb->beginTransaction();
     foreach($list as $order){
         $orderInfo = OrderInfo::model()->findByPk($order['order_id']); 
         if(empty($orderInfo )){
             throw new Exception('Empty order_info');
          }
       // ...
       // save order data into mysql

         }
      $transaction->commit();

   }catch (Exception $e){
       $transaction->rollBack();
    }

现在,我发现我的桌子上有遗漏的I,

代码语言:javascript
复制
select id from order where id between 10231 and 10280

# id      name 
# 10231   name_10231
# 10280   name_10280

# missed 50 data

这与上面的事务代码有关吗?当错误发生在事务中时,它会添加id的索引吗?

如果你能给我一个明确的答复,非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-28 11:23:45

是的,它可能与回滚事务有关。如果您在事务期间插入新记录,MySQL将为该记录保留ID (增加AUTO_INCREMENT计数器,因此不同的进程可能在此事务期间插入记录,而不会发生ID冲突)。如果回滚事务,此ID将不会被重用。所以万一你:

  1. 公开交易,
  2. 插入50项记录,
  3. 回滚事务,

由于这50个in是保留的,但从未提交,因此in列中将出现gap。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55396011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档