Есть ли какие-либо последствия для индекса таблицы ID, если в транзакции произошла ошибка? - PullRequest
0 голосов
/ 28 марта 2019

Вот мой основной код транзакции в Yii 1.1:

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();
    }

Теперь я нахожу пропущенные идентификаторы в порядке таблицы

select id from order where id between 10231 and 10280

# id      name 
# 10231   name_10231
# 10280   name_10280

# missed 50 data

Это связано с кодом транзакции выше? Когда в транзакции произошла ошибка, будет добавлен индекс id?

Большое спасибо, если вы можете дать мне четкий ответ ..

1 Ответ

1 голос
/ 28 марта 2019

Да, это может быть связано с откатом транзакции.Если вы вставляете новую запись во время транзакции, MySQL резервирует ID для этой записи (увеличивает счетчик AUTO_INCREMENT, поэтому разные процессы могут вставлять записи во время этой транзакции без риска конфликта ID).Этот идентификатор не будет использоваться повторно, если вы откатите транзакцию.Поэтому, если вы:

  1. открытая транзакция,
  2. вставка 50 записей,
  3. транзакция отката,

, вы получитепробел в столбце идентификаторов, поскольку эти 50 идентификаторов были зарезервированы, но не зафиксированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...