MySQL의 기본 작동 모드는 자동 커밋 모드입니다. 즉, 트랜잭션을 명시적으로 시작하지 않는 한 각 쿼리는 자동으로 별도의 트랜잭션으로 실행됩니다. autocommit 값을 설정하여 자동 커밋 모드를 자동으로 제출할지 여부를 변경할 수 있습니다.
다음 명령어를 통해 현재 autocommit 모드를 확인할 수 있습니다
mysql> show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ 1 row in set (0.04 sec)
쿼리 결과에서 Value 값이 ON으로 되어 있어 autocommit이 켜져 있음을 알 수 있습니다. 다음 SQL 문
mysql> set autocommit = 0;
을 통해 이 모드를 변경할 수 있습니다. 0과 OFF 값은 동일합니다. 물론 1은 ON을 의미합니다. 위에서 autocommit=0으로 설정하면 현재 트랜잭션을 종료하고 새 트랜잭션을 시작하기 위해 커밋 또는 롤백 문이 실행될 때까지 사용자는 항상 트랜잭션에 있게 됩니다.
예:
Zhang San은 Li Si에게 500위안을 이체합니다. 그런 다음 데이터베이스에서 다음 작업을 수행해야 합니다.
1. 먼저 Zhang San의 계정 잔액이 충분한지 확인합니다.
2. Zhang San의 계정에서 500위안을 뺍니다
3 , Li Si의 계정에 500위안 추가
위의 세 단계를 하나의 트랜잭션에 넣어 커밋을 실행할 수 있습니다. 모두 실행되거나 모두 실행되지 않으면 커밋을 제출하세요. 영구 변경 데이터, 오류가 발생하면 롤백은 변경 전 상태로 롤백됩니다. 거래 처리를 사용하면 Zhang San의 돈이 Li Si의 계좌에서 감소했지만 500위안이 증가하지 않거나 Zhang San의 돈이 Li Si의 계좌에서 차감되지 않았지만 500위안이 추가되는 일이 발생하지 않습니다.
MySQL의 기본 스토리지 엔진은 MyISAM입니다. MyISAM 스토리지 엔진은 트랜잭션 처리를 지원하지 않으므로 자동 커밋을 변경해도 아무런 효과가 없습니다. 하지만 오류가 보고되지 않으므로 트랜잭션 처리를 사용하려면 사용 중인 장치가 InnoDB와 같이 트랜잭션 처리를 지원하는지 확인해야 합니다. 테이블의 스토리지 엔진을 모르는 경우, 테이블 생성 시 트랜잭션 타입을 지정하는 스토리지 엔진이 있는지는 테이블 생성문을 보면 확인할 수 있다. 스토리지 엔진이 지정되지 않은 경우에는 기본 스토리지 엔진이다. 트랜잭션을 지원하지 않는 MyISAM입니다.
물론 트랜잭션 처리는 테이블 데이터의 원자성, 일관성, 격리성 및 내구성을 보장하는 것입니다. 이는 모두 시스템 리소스를 소비하므로 신중하게 선택하세요.
위 내용은 MySQL transaction autocommit으로 자동 제출되는 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!