트랜잭션을 직접 사용할 수는 없지만 특정 예외의 경우 사용할 수 있습니다. 그러나, 그들은 안전 하 고 보장 되지 않습니다. MySQL 프로그래밍에서 트랜잭션을 사용하려는 경우 특별한 방법으로 테이블을 만들어야 합니다. 트랜잭션을 지원하는 많은 유형의 테이블이 있지만 가장 인기 있는 테이블은 InnoDB입니다. 최상의 결과를 얻으려면 단일 트랜잭션 안전 저장소 엔진에서 관리하는 테이블만 사용하여 트랜잭션을 수행해야 합니다. 그렇지 않으면, 다음과 같은 문제가 발생할 수 있습니다 : 내구성 – 이것은 시스템 오류의 경우 커밋 된 트랜잭션의 결과 또는 효과가 지속되도록 보장한다. 다음 명령은 자동으로 트랜잭션을 종료합니다(명령을 실행하기 전에 COMMIT를 수행한 것처럼): 트랜잭션 내에서 트랜잭션이 안전하지 않은 테이블을 사용하는 경우 자동 커밋 상태에 관계없이 해당 테이블에 대한 변경 내용이 한 번에 저장됩니다. 모드. 시작 트랜잭션 또는 BEGIN 문이 새 트랜잭션을 시작합니다. COMMIT는 현재 트랜잭션을 커밋하여 영구적으로 변경합니다. ROLLBACK은 현재 트랜잭션을 롤백하여 변경 내용을 취소합니다. SET 자동 커밋 문은 현재 세션에 대한 기본 자동 커밋 모드를 사용하지 않도록 설정하거나 활성화합니다.

SAVEPOINT에 롤백 문은 트랜잭션을 종료하지 않고 명명된 savepoint로 트랜잭션을 롤백합니다. 저장점을 설정한 후 행에 대한 현재 트랜잭션이 롤백에서 실행 취소되었지만 InnoDB는 저장점 이후에 메모리에 저장된 행 잠금을 해제하지 않습니다. BEGIN 문은 BEGIN을 시작하는 BEGIN 키워드의 사용과 다릅니다. END 복합 문입니다. 후자는 트랜잭션을 시작하지 않습니다. 섹션 13.6.1, “시작 … 엔드 복합 문 구문”. 트랜잭션을 시작하거나 새 트랜잭션을 시작합니다. 참고: MySQL은 트랜잭션 데이터베이스가 아니었지만 이제 InnoDB는 외부 키 제약 조건을 제공하며, ROLLBACK 을 지원하는 다중 문 트랜잭션도 지원 잠금 메커니즘을 지원하므로 MyISAM보다 더 많은 SELECT 쿼리가 설정되어 있습니다. 다음(시작되지 않음) 트랜잭션에 대한 격리 수준입니다. SQL 명령 시작 작업을 실행 하 여 트랜잭션을 시작 합니다. 격리 – 이것은 트랜잭션이 독립적으로 서로 투명하게 작동 할 수 있습니다.

purchase_order 테이블에 데이터를 삽입합니다. 이렇게 하면 데이터가 삽입된 다음 데이터가 삭제되는 트랜잭션이 시작되고 오류가 발생하면 트랜잭션이 롤백됩니다. 트랜잭션을 지원하지 않는 MySQL의 테이블 처리기를 사용하는 경우 SELECT와 UPDATE 사이에 다른 스레드가 없는지 확인하려면 LOCK TABLE을 사용해야 합니다. 다음 예제에서는 안전하게 실행하기 위해 LOCK TABLE이 필요합니다. 저장된 모든 프로그램 (저장 프로시저 및 함수, 트리거 및 이벤트) 내에서 파서는 BEGIN [WORK]를 BEGIN의 시작으로 처리합니다. 끝 블록. 대신 START 트랜잭션을 통해 이 컨텍스트에서 트랜잭션을 시작합니다. LOCK TABLE을 사용하는 주된 이유는 테이블을 업데이트할 때 트랜잭션을 에뮬레이션하거나 속도를 높이기 위한 것입니다. 이것은 나중에 더 자세히 설명되어 있습니다. AUTOCOMMIT이라는 세션 변수를 설정하여 트랜잭션의 동작을 제어할 수 있습니다.