MySQL 트랜잭션:
1.MySQL 트랜잭션 제어문
(1) 트랜잭션을 엽니다
begin;
(2) 트랜잭션을 롤백합니다
commit;
(4). 트랜잭션이 자동인지 여부 제출
rollback;
예:
set autocommit = {0 | 1}; // 0不自动提交,1自动提交
데이터를 삽입하는 간단한 트랜잭션입니다
begin;// 开启事务 insert into table_name values(内容); commit;// 提交事务
데이터를 삽입하는 간단한 롤백 트랜잭션입니다
2. MySQL 트랜잭션 격리 문
다음의 격리 수준을 확인하세요. MySQL
begin;// 开启事务 insert into table_name values(内容);// 后悔了,不想插入数据了 rollback;// 回滚,取消这次的事务操作
(1).read-uncommitted(커밋되지 않은 콘텐츠 읽기)
Dirty reading(문제 발생);
사용자의 두 쿼리 결과 내용이 동일하지 않습니다.
기본 격리 수준을 설정합니다( 설정 완료 재로그인 필요):
show variables like 'tx_isolation';
두 명의 사용자가 동시에 데이터베이스에 로그인하여 각각 트랜잭션을 시작합니다. 한 사용자의 트랜잭션은 추가, 삭제, 수정 작업을 수행하고 다른 사용자의 트랜잭션은 쿼리 작업만 수행합니다. 전자는 제출하지 않고 작업을 수행하고, 후자는 작업 결과를 볼 수 있지만 이때 전자가 트랜잭션을 롤백하면 후자의 쿼리는 지난번과 다른 결과(즉, no의 결과)를 보게 됩니다. 문제.
(2).read 커밋(커밋된 콘텐츠 읽기)
트랜잭션은 커밋된 트랜잭션에 의해 변경된 내용만 볼 수 있습니다. 이 수준에서는 반복 불가능한 읽기가 발생할 수 있습니다. 문제.
설정 기본 격리 수준(설정 완료 후 다시 로그인해야 함):
set global transaction isolation level read uncommitted;
한 트랜잭션에서 두 가지 다른 쿼리 결과를 보았습니다(더티 읽기와 유사).
(3).repeatable read( 반복 읽기)
동일한 트랜잭션의 여러 인스턴스가 동시에 데이터를 읽을 때 동일한 데이터 행을 볼 수 있도록 보장할 수 있습니다(데이터베이스의 Mornar 격리 수준).
기본 격리 수준을 설정합니다(해당 후 다시 로그인해야 함). 설정 완료):
set global transaction isolation level read committed;
즉, 트랜잭션에서 다른 사용자가 데이터를 어떻게 수정하더라도 이 트랜잭션에서 쿼리된 결과는 항상 동일합니다.
***암시적 트랜잭션 커밋***:
set global transaction isolation level repeatable read;
3.InnoDB 잠금 메커니즘
(1) 테이블에는 기본 키와 인덱스가 없습니다. 트랜잭션은 테이블의 모든 레코드를 잠그며 다른 트랜잭션은 테이블을 조작할 수 없습니다.
(2) 테이블에 기본 키나 인덱스가 있는 경우 트랜잭션은 자신이 운영하는 테이블의 특정 데이터 행을 잠그고 다른 트랜잭션이 이 안의 다른 데이터에 대해 작업하는 경우 전체 테이블을 잠그지 않습니다. 여기서 행 수준 잠금은 즉, n개의 데이터 행을 수정하는 경우와 같은 잠금이라는 점에 유의해야 합니다. id<10.=이면 id = 11인 데이터도 잠기게 됩니다. 이는 주의해야 할 사항입니다.
위 내용은 MySQL의 트랜잭션에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!