Php 用于交换行的Laravel事务
我有一个带有列的表,其中一个是Php 用于交换行的Laravel事务,php,laravel,Php,Laravel,我有一个带有列的表,其中一个是id +-------+ +-------+ | id | | id | +-------+ +-------+ | 1 | \ | 5 | | 2 | --------- \ | 3 | | 3 | --------- / | 2 | | 4 |
id
+-------+ +-------+
| id | | id |
+-------+ +-------+
| 1 | \ | 5 |
| 2 | --------- \ | 3 |
| 3 | --------- / | 2 |
| 4 | / | 1 |
| 5 | | 4 |
| 6 | | 6 |
+-------+ +-------+
我想交换行的
id
值,这样,如果任何一个步骤失败,它必须回滚,id
当前设置为唯一约束。如何使用Laravel中的事务交换这些id
值?我不熟悉这一点。首先将数据库操作包装到事务闭包中,如下所示:
DB::transaction(function () {
DB::table('users')->update(['name' => 'Billy Bob']);
DB::table('posts')->delete();
});
如果要交换的列在当前id列中包含任何匹配的值,则在设置主键字段id时会遇到重复冲突的问题
您最好使用所需列中的id创建一个新的临时表,用剩余的现有表数据填充它,删除该表,然后用临时表重新创建它
另外,它们是否有其他引用此表的表?如果是这种情况,更换钥匙可能会造成严重破坏。您可以使用此
DB::transaction(function() {
// your code goes here
});
闭包中的所有内容都在事务中执行。
如果发生任何错误,它将自动回滚。我认为创建另一个临时表是没有效率的。是否有任何方法可以在不使用Schema fascade的情况下删除unique,然后再将unique添加回?可以ALTER TABLE TABLE\u name DROP PRIMARY KEY
。你多久做一次这件事会影响你的效率?啊,忘了原始查询:)我会试试。关于效率:可以有大量的行。