mysqli :: release_savepoint 로 뛰어 들기 전에 트랜잭션과 롤백 메커니즘을 이해해야합니다. 트랜잭션은 모두 성공적으로 실행되거나 모든 실패 및 롤백 (즉, 실행 된 모든 작업을 취소)하는 일련의 데이터베이스 작업 모음을 나타냅니다. 트랜잭션에는 일반적으로 다음 네 가지 특성이 포함되며, 집합 적으로 산성 특성이라고합니다.
원자력 : 트랜잭션의 모든 운영은 완전히 실행되거나 전혀 실행되지 않습니다.
일관성 : 데이터베이스는 거래가 실행되기 전후에 일관된 상태 여야합니다.
격리 : 거래 실행은 다른 거래에 의해 방해해서는 안됩니다.
내구성 : 트랜잭션이 완료된 후에는 데이터베이스 변경이 영구적입니다.
트랜잭션 실행 중에 오류가 발생하면 개발자는 롤백 메커니즘을 사용하여 트랜잭션이 시작되기 전에 데이터베이스를 상태로 복원 할 수 있습니다. 롤백은 롤백 SQL 문을 통해 구현할 수 있습니다.
SavePoint는 트랜잭션의 마커 포인트이므로 개발자가 트랜잭션에서 여러 체크 포인트를 설정할 수 있습니다. 트랜잭션에 문제가 있으면 개발자는 전체 트랜잭션을 완전히 롤백하는 대신 저장 포인트로 롤백 할 수 있습니다. 이렇게하면 오류로 인한 작동 롤백 범위가 줄어들고 효율성을 향상시킬 수 있습니다.
예를 들어, 트랜잭션에 일련의 작업이 필요하다고 가정하고 일부 단계에서 개발자는 SavePoint를 사용하여 성공적으로 실행 된 모든 작업을 잃지 않고 일부 작업을 취소 할 수 있습니다.
mysqli :: release_savepoint 함수는 트랜잭션에서 생성 된 저장 포인트를 릴리스 (삭제)하는 데 사용됩니다. 개발자가 저장 포인트가 더 이상 필요하지 않음을 확인하면 함수를 호출하여 해제 할 수 있으므로 더 이상 데이터베이스에 사용되지 않는 리소스를 정리할 수 있습니다. 이점의 장점은 거래의 저장 포인트 수를 줄이고 효율적인 거래 관리를 보장하는 데 도움이된다는 것입니다.
<span><span>mysqli::</span><span><span class="hljs-title function_ invoke__">release_savepoint</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$savepoint</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>$ savepoint : 릴리스 할 SavePoint의 이름입니다.
성공 : 진실로 돌아갑니다.
실패 : 반환 허위 및 오류 정보는 mysqli_error () 를 통해 얻을 수 있습니다.
다음은 MySQLI :: Release_SavePoint를 사용하여 트랜잭션 및 저장 지정을 관리하는 방법을 보여주는 예입니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 데이터베이스 연결을 만듭니다</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-comment">// 연결이 성공했는지 확인하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"연결이 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// 거래를 시작하십시오</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">begin_transaction</span></span><span>();
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-comment">// 저장 포인트를 만듭니다</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SAVEPOINT savepoint1"</span></span><span>);
</span><span><span class="hljs-comment">// 일부 데이터베이스 작업을 수행하십시오</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]')"</span></span><span>);
</span><span><span class="hljs-comment">// 다른 저장 지점을 만듭니다</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SAVEPOINT savepoint2"</span></span><span>);
</span><span><span class="hljs-comment">// 다른 행동을 수행하십시오</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO orders (user_id, product) VALUES (LAST_INSERT_ID(), 'Laptop')"</span></span><span>);
</span><span><span class="hljs-comment">// 여기에 오류가 있다고 가정하십시오,롤백해야합니다savepoint1</span></span><span>
</span><span><span class="hljs-comment">// 롤백하려면savepoint1,사용 가능ROLLBACK TO SAVEPOINT성명</span></span><span>
</span><span><span class="hljs-comment">// $mysqli->query("ROLLBACK TO SAVEPOINT savepoint1");</span></span><span>
</span><span><span class="hljs-comment">// 모든 것이 잘되면,저장 포인트를 해제하십시오</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">release_savepoint</span></span><span>(</span><span><span class="hljs-string">"savepoint1"</span></span><span>);
</span><span><span class="hljs-comment">// 거래를 제출하십시오</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-comment">// 예외를 포착하고 전체 트랜잭션을 롤백하십시오</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">rollback</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"거래 롤백: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-comment">// 데이터베이스 연결을 닫습니다</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>위 코드에서 :
SavePoint를 사용하여 SavePoint를 만듭니다.
mysqli :: release_savepoint를 사용하여 SavePoint1을 릴리스 하여이 저장 포인트가 더 이상 필요하지 않음을 나타냅니다.
트랜잭션이 실패하면 롤백을 통해 SavePoint를 통해 SavePoint로 롤백하여 SavePoint 또는 롤백을 통해 전체 트랜잭션을 롤백 할 수 있습니다.
mysqli :: release_savepoint 의 주요 기능은 더 이상 저장 포인트가 필요하지 않아 자원을 적시에 청소하는 것입니다. 특히 복잡한 트랜잭션을 처리 할 때 여러 저장 포인트가 설정 될 수 있습니다. 이러한 저장 포인트가 릴리스되지 않으면 시스템 리소스를 계속 점유하고 데이터베이스의 성능에 영향을 미칩니다. 따라서 MySQLI :: Release_SavePoint를 사용하여 더 이상 필요하지 않은 저장 점을 해제하는 것이 리소스를 관리하는 좋은 방법입니다.
저장 리소스 : 더 이상 자원 낭비를 피할 필요가없는 저장 포인트를 릴리스합니다.
효율성 향상 : 트랜잭션에서 저장 포인트 수를 줄이면 거래 실행 효율성을 향상시키는 데 도움이됩니다.
향상된 유지 관리 : 긴 트랜잭션에서는 더 이상 필요한 저장 포인트를 풀어서 거래 관리가 더 명확 해집니다.
mysqli :: release_savepoint 함수는 데이터베이스 트랜잭션의 롤백 메커니즘에서 중요한 역할을합니다. 더 이상 필요하지 않은 저장 포인트를 확보하여 자원 사용량을 줄이고 거래 효율성을 향상시킵니다. 복잡한 데이터베이스 작업을 처리 할 때 SavePoints 및 Releasion_SavePoint 의 합리적인 사용은 코드의 가독성, 유지 관리 및 성능을 크게 향상시킬 수 있습니다.