Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果事务中发生错误,是否会对表的id索引产生影响?_Php_Mysql_Yii - Fatal编程技术网

Php 如果事务中发生错误,是否会对表的id索引产生影响?

Php 如果事务中发生错误,是否会对表的id索引产生影响?,php,mysql,yii,Php,Mysql,Yii,以下是我在Yii 1.1中的主要交易代码: 试一试{ $transaction=Yii::app->projectdb->beginTransaction; foreach$作为$order列出{ $orderInfo=orderInfo::model->findByPk$order['order_id']; ifempty$orderInfo{ 抛出新异常“空订单信息”; } // ... //将订单数据保存到mysql中 } $transaction->commit; }捕获异常$e{ $t

以下是我在Yii 1.1中的主要交易代码:

试一试{ $transaction=Yii::app->projectdb->beginTransaction; foreach$作为$order列出{ $orderInfo=orderInfo::model->findByPk$order['order_id']; ifempty$orderInfo{ 抛出新异常“空订单信息”; } // ... //将订单数据保存到mysql中 } $transaction->commit; }捕获异常$e{ $transaction->rollBack; } 现在,我发现我的表顺序中缺少ID

select id from order where id between 10231 and 10280

# id      name 
# 10231   name_10231
# 10280   name_10280

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


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

是,它可能与回滚事务相关。如果您在事务期间插入新记录,MySQL会保留此记录的ID并增加自动增量计数器,因此不同的进程可能会在事务期间插入记录,而不会有ID冲突的风险。如果回滚事务,则不会重用此ID。因此,如果您:

公开交易, 插入50条记录, 回滚事务,
由于这50个ID已被保留,但从未提交,您将在IDs列中出现gap。

谢谢您的回答,还有更多问题。错误发生的地方不同吗?我的意思是,如果错误发生在model->save操作之前,我会捕获它并回滚,它仍然会自动增加ID吗?否,计数器会通过插入查询增加,这是在save内部执行的。