以下是我在YII1.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();
}现在,我发现我的桌子上有遗漏的I,
select id from order where id between 10231 and 10280
# id name
# 10231 name_10231
# 10280 name_10280
# missed 50 data这与上面的事务代码有关吗?当错误发生在事务中时,它会添加id的索引吗?
如果你能给我一个明确的答复,非常感谢。
发布于 2019-03-28 11:23:45
是的,它可能与回滚事务有关。如果您在事务期间插入新记录,MySQL将为该记录保留ID (增加AUTO_INCREMENT计数器,因此不同的进程可能在此事务期间插入记录,而不会发生ID冲突)。如果回滚事务,此ID将不会被重用。所以万一你:
由于这50个in是保留的,但从未提交,因此in列中将出现gap。
https://stackoverflow.com/questions/55396011
复制相似问题