php mysql 트랜잭션 예제

MySQL 지원 트랜잭션의 모든 저장소 엔진(예: MyISAM)은 트랜잭션을 지원하지 않지만 InnoDB는 트랜잭션을 지원하지 않습니다. 이제, 예를 들어, 우리가 USERTBL에 새 레코드 / 새 사용자를 삽입해야하고 그 후 우리는 테이블 EMAILTBL에 사용자의 이메일을 삽입 할 가정 해 봅시다. 첫 번째 삽입이 성공한 경우에만 두 번째 테이블에 삽입하려고 합니다. 또한 두 번째 삽입이 실패하면 트랜잭션을 종료하여 첫 번째 삽입이 실행 취소됩니다. 트랜잭션은 하나 이상의 SQL 문을 포함하는 논리적 작업 단위입니다. 트랜잭션은 커밋되거나 롤백할 수 있는 원자 단위작업입니다. 트랜잭션이 데이터베이스를 여러 번 변경하면 트랜잭션이 커밋될 때 모든 변경 내용이 성공하거나 트랜잭션이 롤백될 때 모든 변경 내용이 실행 취소됩니다. COMMIT를 실행하지 않으면 PHP 페이지가 끝날 때 데이터 업데이트가 적용되지 않습니다. 그러나 우리는 모두 좋은 프로그래머이기 때문에 트랜잭션을 실행 취소하려는 경우 항상 트랜잭션이 필요하지 는 않습니다. 그러나 은행이나 금융 응용 프로그램뿐만 아니라 유용합니다. 두 개 이상의 레코드를 업데이트해야 할 때마다 트랜잭션을 사용해야 하며 모두 성공하도록 해야 합니다. MYSQLI_TRANS_START_With_CONSISTENT_SNAPSHOT: 트랜잭션을 “일관된 스냅샷으로 트랜잭션 시작”으로 시작합니다.

트랜잭션 저널의 레코드에 대한 SQL 문은 다음과 같습니다. InnoDB 저장소 엔진의 테이블만 트랜잭션을 지원합니다. ACID(원자성, 일관성, 격리, 내구성)는 데이터베이스 트랜잭션이 안정적으로 처리되도록 보장하는 속성 집합입니다. MySQL에서 InnoDB 스토리지 엔진은 ACID 호환 기능을 지원합니다. 다음 섹션에서는 MySQL 기능, 특히 InnoDB 저장소 엔진이 ACID 모델의 범주와 상호 작용하는 방법에 대해 설명합니다. 현재 트랜잭션에 이름이 같은 저장점이 있으면 이전 저장점이 삭제되고 새 저장점이 설정됩니다. SAVEPOINT에 롤백 문은 트랜잭션을 종료하지 않고 명명된 savepoint로 트랜잭션을 롤백합니다. 저장점을 설정한 후 행에 대한 현재 트랜잭션이 롤백에서 실행 취소되었지만 InnoDB는 저장점 이후에 메모리에 저장된 행 잠금을 해제하지 않습니다. 기본적으로 모든 SQL 문은 자체 트랜잭션 내에서 실행됩니다. 자동 커밋을 끄면 이 작업이 취소되므로 이후의 모든 SQL 업데이트가 단일 트랜잭션의 일부를 구성합니다.

모든 문이 트랜잭션을 지원하는 것은 아닙니다. 예를 들어 CREATE TABLE 또는 ALTER TABLE 문이 있는 경우 PHP에서 mysqli_commit(를 통해)가 만들어지때까지 기다리지 않고 암시적 커밋(데이터베이스를 영구적으로 변경)합니다. 롤백할 수 없는 명령문과 암시적 커밋을 만드는 문이 MySQL 설명서를 확인합니다.