>  기사  >  데이터 베이스  >  MySQL의 트랜잭션에 대한 자세한 설명

MySQL의 트랜잭션에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-11 11:39:061368검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.