TCL 트랜잭션 제어 언어

물론 저를 포함하여 많은 사람들이 msql의 일을 잘 이해하지 못하기 때문에 오늘 저는 mysql의 일을 탐구했으며 경험은 다음과 같이 기록됩니다.

우선 거래의 개념, 거래 란?

트랜잭션 : 트랜잭션은 하나의 단위에 하나 이상의 SQL 문으로 구성되며이 단위에서 각 mysql 문은 상호 의존적입니다. 전체 단일 단위를 분할 할 수없는 전체로, 단위의 SQL 문이 실패하거나 오류를 생성하면 전체 단위가 롤백되고 영향을받는 데이터는 트랜잭션이 시작되기 전의 상태로 돌아갑니다. unit sql 문이 성공적으로 수행되면 트랜잭션이 원활하게 수행됩니다.

트랜잭션의 ACID 속성 :

1. 원 자성 :

원자 성은 트랜잭션이 나눌 수없는 작업 단위이며 트랜잭션의 작업이 모두 발생하거나 발생하지 않음을 의미합니다.

2. 일관성 :

트랜잭션은 데이터베이스를 하나의 일관된 상태에서 다른 일관된 상태로 변환해야합니다.

3. 격리 :

트랜잭션 격리는 트랜잭션 실행이 다른 트랜잭션에 의해 방해 될 수 없음을 의미합니다. 즉, 트랜잭션에서 사용되는 내부 작업 및 데이터가 다른 동시 트랜잭션과 격리되고 동시에 실행되는 각 트랜잭션이 서로 방해 할 수 없습니다.

4, 지구력 :

지속성은 트랜잭션이 커밋되면 데이터베이스의 데이터에 대한 변경 사항이 영구적이며 다른 후속 작업 및 데이터베이스 오류가 영향을 미치지 않아야 함을 의미합니다.

거래 생성 :

암시 적 트랜잭션 : 트랜잭션에 명백한 시작 및 종료 표시가 없습니다.

삽입, 업데이트, 삭제 등

명시 적 거래 : 거래에는 명백한 시작 및 종료 표시가 있습니다.

전제 조건 : 먼저 자동 제출 기능을 비활성화하도록 설정해야합니다.

set autocommit = 0; (현재에만 유효하며 다음에 사용할 때 재설정해야 함)

1, autocommit = 0 설정

거래 시작, 선택 사항

2. 트랜잭션에 SQL 문을 작성합니다 (선택, 삽입, 업데이트, 삭제).

진술 1;

진술 2;

....

3. 3 단계 :

거래 종료

커밋, 트랜잭션 커밋

롤백, 트랜잭션 롤백

저장 점, 저장 노드

시연 할 예를 제공하십시오.

savepoint的使用

set autocommit=0; #关闭自动提交

start transaction;#开始事务

delete from account where id=25;#具体操作

savepoint a;#保存节点

delete from account where id=28;#事务的具体操作

rollback to a;#回滚到节点a

个人理解这个更像是快照或者锚点的意思,在需要的位置保存一个节点,然后需要回滚时,随时都可以回到节点保存时的状态。

또한 동시에 실행되는 여러 트랜잭션의 경우 이러한 트랜잭션이 데이터베이스의 동일한 데이터에 액세스 할 때 필요한 격리 메커니즘이 채택되지 않으면 다양한 동시성 문제가 발생합니다.

1. 더티 읽기 : 두 개의 트랜잭션 T1 및 T2의 경우 T1이 T2에 의해 업데이트 되었지만 아직 커밋되지 않은 필드를 읽은 후 T2가 롤백하면 T1이 읽은 콘텐츠는 일시적이며 유효하지 않습니다.

2. 반복 불가능한 읽기 : 두 개의 트랜잭션 T1, T2, T1이 필드를 읽은 다음 T2 가 필드를 업데이트 한 다음 T1이 동일한 필드를 다시 읽고 값이 다릅니다.

3. 팬텀 읽기 : 두 개의 트랜잭션에 대해 T1, T2, T1은 테이블에서 필드를 읽은 다음 T2는 테이블에 새 행 삽입 합니다 . 그 후 T1이 동일한 테이블을 다시 읽으면 몇 줄 더.

데이터베이스 트랜잭션 격리 :

데이터베이스 시스템은 다양한 트랜잭션을 동시에 격리하고 실행할 수 있어야하므로 서로 영향을주지 않고 다양한 동시성 문제를 방지 할 수 있습니다.

트랜잭션과 다른 트랜잭션 간의 격리 정도를 격리 수준이라고합니다. 데이터베이스는 다양한 트랜잭션 격리 수준을 지정하고 서로 다른 격리 수준은 서로 다른 수준의 간섭에 해당합니다. 격리 수준이 높을수록 데이터 일관성은 향상되지만 동시성은 약해집니다.

mysql 데이터베이스는 4 개의 트랜잭션 격리 수준을 지원하며 mysql의 기본 트랜잭션 격리 수준은 반복 가능한 읽기입니다.

1. 커밋되지 않은 읽기 (더티 읽기, 팬텀 읽기, 반복 불가능 읽기)

2. 읽기가 제출되었습니다 (더티 읽기 해결).

3. 반복 가능한 읽기 (더티 읽기 및 반복 불가능 읽기는 해결하지만 팬텀 읽기는 해결하지 않음)

4. 직렬화 (모든 문제 해결), 그러나 성능이 상대적으로 낮습니다.

 따라서 기본 격리 수준 (반복 읽기)을 선택합니다.

 

 

추천

출처blog.csdn.net/weixin_42575020/article/details/113526651