MySQLi-트랜잭션

트랜잭션은 하나의 단일 작업 단위 인 것처럼 수행되는 데이터베이스 조작 작업의 순차적 그룹입니다. 즉, 그룹 내의 각 개별 작업이 성공하지 않으면 트랜잭션이 완료되지 않습니다. 트랜잭션 내의 작업이 실패하면 전체 트랜잭션이 실패합니다.

실제로 많은 SQL 쿼리를 그룹으로 묶고 트랜잭션의 일부로 모두 함께 실행합니다.

거래의 속성

트랜잭션은 일반적으로 ACID라는 약어로 참조되는 다음 네 가지 표준 속성을 가지고 있습니다.

  • Atomicity− 작업 단위 내의 모든 작업이 성공적으로 완료되었는지 확인합니다. 그렇지 않으면 트랜잭션이 실패 지점에서 중단되고 이전 작업이 이전 상태로 롤백됩니다.

  • Consistency − 성공적으로 커밋 된 트랜잭션에서 데이터베이스가 상태를 적절하게 변경하는지 확인합니다.

  • Isolation − 트랜잭션이 독립적으로 작동하고 서로에게 투명하게 작동합니다.

  • Durability − 시스템 장애시 커밋 된 트랜잭션의 결과 또는 효과가 지속되도록합니다.

MySQL에서 트랜잭션은 BEGIN WORK 문으로 시작하고 COMMIT 또는 ROLLBACK 문으로 끝납니다. 시작 및 종료 문 사이의 SQLi 명령은 트랜잭션의 대부분을 구성합니다.

커밋 및 롤백

이 두 키워드 CommitRollback 주로 MySQL 트랜잭션에 사용됩니다.

  • 성공적인 트랜잭션이 완료되면 관련된 모든 테이블에 대한 변경 사항이 적용되도록 COMMIT 명령을 발행해야합니다.

  • 오류가 발생하면 ROLLBACK 명령을 실행하여 트랜잭션에서 참조 된 모든 테이블을 이전 상태로 되돌려 야합니다.

세션 변수를 설정하여 트랜잭션의 동작을 제어 할 수 있습니다. AUTOCOMMIT. AUTOCOMMIT가 1 (기본값)로 설정된 경우 각 SQL 문 (트랜잭션 내 여부)은 완전한 트랜잭션으로 간주되고 완료 될 때 기본적으로 커밋됩니다. AUTOCOMMIT가 0으로 설정되면 SET AUTOCOMMIT = 0 명령을 실행하여 후속 명령문이 트랜잭션처럼 작동하며 명시 적 COMMIT 명령문이 발행 될 때까지 활동이 커미트되지 않습니다.

다음을 사용하여 PHP에서 이러한 SQL 명령을 실행할 수 있습니다. mysqli_query() 함수.

거래에 대한 일반적인 예

이 이벤트 시퀀스는 사용되는 프로그래밍 언어와 무관합니다. 논리 경로는 응용 프로그램을 만드는 데 사용하는 언어로 만들 수 있습니다.

다음을 사용하여 PHP에서 이러한 SQL 명령을 실행할 수 있습니다. mysqli_query() 함수.

  • SQL 명령을 실행하여 트랜잭션 시작 BEGIN WORK.

  • SELECT, INSERT, UPDATE 또는 DELETE와 같은 하나 이상의 SQL 명령을 실행하십시오.

  • 오류가없고 모든 것이 귀하의 요구 사항에 맞는지 확인하십시오.

  • 오류가 있으면 ROLLBACK 명령을 실행하고 그렇지 않으면 COMMIT 명령을 실행하십시오.

MySQLi의 트랜잭션 안전 테이블 유형

거래를 직접 사용할 수는 없지만 할 수는 있지만 안전하고 보장되지는 않습니다. MySQLi 프로그래밍에서 트랜잭션을 사용하려는 경우 특별한 방식으로 테이블을 만들어야합니다. 트랜잭션을 지원하는 많은 유형의 테이블이 있지만 가장 많이 사용되는 테이블은InnoDB.

InnoDB 테이블을 지원하려면 소스에서 MySQLi를 컴파일 할 때 특정 컴파일 매개 변수가 필요합니다. MySQLi 버전에 InnoDB가 지원되지 않는 경우 인터넷 서비스 제공 업체에 InnoDB 테이블 유형을 지원하는 MySQLi 버전을 빌드하거나 Windows 또는 Linux / UNIX 용 MySQL-Max 바이너리 배포를 다운로드하여 설치하고 다음에서 테이블 유형으로 작업하도록 요청하십시오. 개발 환경.

MySQLi 설치가 InnoDB 테이블을 지원하는 경우 간단히 TYPE = InnoDB테이블 생성 문에 대한 정의. 예를 들어, 다음 코드는 tutorials_innodb라는 InnoDB 테이블을 생성합니다.

root@host# mysql -u root -p;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_innodb
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)

InnoDB 에 대해 자세히 알아 보려면 다음 링크를 확인하십시오.

다음과 같은 다른 테이블 유형을 사용할 수 있습니다. GEMINI 또는 BDB하지만이 두 가지 유형을 지원하는 경우 설치에 따라 다릅니다.