ROLLBACK 사용
이제 트랜잭션 처리가 무엇인지 알았으니 트랜잭션 관리와 관련된 문제에 대해 논의해 보겠습니다.
트랜잭션 처리 관리의 핵심은 SQL 문 그룹을 논리적 청크로 나누고 데이터를 롤백해야 하는 시기와 롤백하지 말아야 하는 시기를 명확하게 지정하는 것입니다.
MySQL은 다음 문을 사용하여 트랜잭션의 시작을 식별합니다.
입력:
start transaction
MySQL의 ROLLBACK 명령은 MySQL 문을 롤백(실행 취소)하는 데 사용됩니다. 다음 명령문을 참조하세요.
입력:
select * from ordertotals; start transaction; delete from ordertotals; select * from ordertotals; rollback; select * from ordertotals;
분석: 이 예는 ordertotals 테이블의 내용을 표시하는 것으로 시작됩니다. 먼저 SELECT를 실행하여 테이블이 비어 있지 않음을 표시합니다. 그런 다음 트랜잭션을 시작하고 DELETE 문을 사용하여 ordertotals의 모든 행을 삭제합니다. 또 다른 SELECT 문은 ordertotals가 실제로 비어 있는지 확인합니다. 이때 ROLLBACK 문은 START TRANSACTION 이후의 모든 문을 롤백하는데 사용되며 마지막 SELECT 문에서는 테이블이 비어 있지 않음을 보여줍니다.
분명히 ROLLBACK은 트랜잭션 내에서만 사용할 수 있습니다(START TRANSACTION 명령 실행 후).
롤백할 수 있는 문은 무엇인가요? 트랜잭션은 INSERT, UPDATE 및 DELETE 문을 관리하는 데 사용됩니다. SELECT 문은 롤백할 수 없습니다. (이 작업을 수행해도 소용이 없습니다.) CREATE 또는 DROP 작업을 롤백할 수 없습니다. 이 두 문은 트랜잭션 블록 내에서 사용할 수 있지만 롤백을 수행하는 경우 실행 취소되지 않습니다.
COMMIT 사용
일반 MySQL 문은 데이터베이스 테이블에 대해 직접 실행되고 작성됩니다. 이는 소위 암시적 커밋(Implicit Commit), 즉 커밋(쓰기 또는 저장) 작업이 자동으로 수행되는 것입니다. 그러나 트랜잭션 블록 내에서는 커밋이 암시적으로 발생하지 않습니다. 명시적인 커밋을 수행하려면 다음과 같이 COMMIT 문을 사용합니다.
입력:
start transaction; delete from orderitems where order_num = 20010; delete from orders where order_num = 20010; commit;
분석: 이 예에서는 주문 20010이 시스템에서 완전히 제거됩니다. 여기에는 두 개의 데이터베이스 테이블(주문 및 주문 항목) 업데이트가 포함되므로 주문이 부분적으로 삭제되지 않도록 트랜잭션 블록이 사용됩니다. 마지막 COMMIT 문은 오류 없이 변경 사항만 기록합니다. 첫 번째 DELETE가 작동하지만 두 번째 DELETE가 실패하면 DELETE가 커밋되지 않습니다(사실 자동으로 취소됩니다).
암시적 트랜잭션 종료 COMMIT 또는 ROLLBACK 문이 실행되면 트랜잭션이 자동으로 닫힙니다(향후 변경 사항은 암시적으로 커밋됩니다).
[관련 추천]
3. MySQL UPDATE 트리거(업데이트) 및 트리거 심층 분석
4. MySQL 삭제 트리거(삭제) 사용법에 대한 자세한 설명
5. MySQL의 삽입 트리거(insert)에 대한 자세한 설명
위 내용은 MySQL 트랜잭션-ROLLBACK, COMMIT 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!