MySQLi 트랜잭션에 대한 API 지원

MySQL 서버는 사용되는 스토리지 엔진에 따라 트랜잭션을 지원합니다. MySQL 5.5부터 기본 스토리지 엔진은 InnoDB입니다. InnoDB는 전체 ACID 트랜잭션을 지원합니다.

트랜잭션은 SQL 또는 API 호출을 사용하여 제어할 수 있습니다. autocommit 모드를 활성화 및 비활성화하고 트랜잭션을 커밋 및 롤백하려면 API 호출을 사용하는 것이 좋습니다.

예제 #1 SQL 및 API를 통한 자동 커밋 모드 설정

                  
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");

/* Recommended: using API to control transactional settings */
$mysqli->autocommit(false);

/* Won't be monitored and recognized by the replication and the load balancing plugin */
$mysqli->query('SET AUTOCOMMIT = 0');
                  
                

복제 및 로드 밸런싱 플러그인과 같은 선택적 기능 패키지는 API 호출을 쉽게 모니터링할 수 있습니다. 복제 플러그인은 트랜잭션이 API 호출로 제어되는 경우 트랜잭션 인식 로드 밸런싱을 제공합니다. autocommit 모드 설정, 트랜잭션 커밋 또는 롤백에 SQL 문을 사용하는 경우 트랜잭션 인식 로드 밸런싱을 사용할 수 없습니다.

예제 #2 커밋 및 롤백

                  
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
$mysqli->autocommit(false);

$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();

$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
                  
                

MySQL 서버는 모든 명령문을 롤백할 수 없습니다. 일부 명령문은 암시적 커밋을 유발합니다.

기타