트랜잭션 작업(쿼리 빌더 16)
가장 간단한 방법은 트랜잭션 메소드를 사용하여 클로저의 코드에서 예외가 발생하면 자동으로 롤백됩니다. 예:
Db::transaction(function () { Db::table('think_user')->find(1); Db::table('think_user')->delete(1); });
예를 들어 수동으로 트랜잭션을 제어할 수도 있습니다. :
// 启动事务 Db::startTrans(); try { Db::table('think_user')->find(1); Db::table('think_user')->delete(1); // 提交事务 Db::commit(); } catch (\Exception $e) { // 回滚事务 Db::rollback(); }
트랜잭션 작업에 주의를 기울이고 데이터베이스 연결이 동일한 것을 사용하고 있는지 확인하세요.
전역(분산) 트랜잭션을 구현하기 위해 MySQL의 XA 트랜잭션을 지원할 수 있습니다.
Db::transactionXa(function () { Db::connect('db1')->table('think_user')->delete(1); Db::connect('db2')->table('think_user')->delete(1); }, [Db::connect('db1'),Db::connect('db2')]);
데이터 테이블 엔진이 InnoDB인지 확인하고 XA 트랜잭션 지원을 활성화하세요.