我想在Laravel 5.6中的交易失败后从多个mysql表中回滚或重置自动增量ID。
DB::beginTransaction();
try {
//My Database Queries goes here
DB::commit();
}
catch (\Exception $e) {
DB::rollback();
}
我只是想要的,我想在此处编写一些查询以回滚自动增量ID
catch (\Exception $e) {
DB::rollback();
}
在执行DB::rollback()
之后。
有人能建议我这样做吗?。
答案 0 :(得分:0)
我认为您想删除该表的所有行,如果是,这是实现此目的的方法:
DB::table('YOURTABLE')->truncate();
答案 1 :(得分:0)
要严格回答您的问题,我认为您应该首先找到AI列的最大值(例如,名为id)
SQL:
SELECT MAX(id) FROM yourTable;
在Laravel中
$maxId = DB::table('yourTable')->max('id');
然后重置自动增量值:
SQL:
ALTER TABLE yourTable AUTO_INCREMENT=$maxId;
在Laravel中
DB::statement("ALTER TABLE yourTable AUTO_INCREMENT=$maxId");
无论如何,我会小心您的所作所为。 以防万一您认为要依赖AI id列。...看看MySQL AUTO_INCREMENT does not ROLLBACK
否则,如果只是担心不要随着id值的增长而变大,因为您有成千上万次失败的事务...这可能是一种优化,但是在这种情况下,我将完全摆脱id列...