MySQL 트랜잭션은 주로 대규모 작업과 복잡성이 높은 데이터를 처리하는 데 사용됩니다. 예를 들어 인사관리 시스템에서 사람을 삭제하면 그 사람의 기본 정보도 삭제해야 하고, 사서함, 글 등 그 사람과 관련된 정보도 삭제해야 합니다. 이런 식으로 이러한 데이터베이스 운영 문은 비즈니스를 구성합니다!
이 글은 주로 MySQL 트랜잭션을 운영하는 방법을 소개합니다. ACID 특성을 예제 형식으로 자세히 분석합니다. 도움이 필요한 친구들이 참고할 수 있습니다. PHP는 MySQL 트랜잭션을 작동합니다. 이 방법은 참조용으로 모든 사람과 공유됩니다. 구체적인 방법은 다음과 같습니다.
일반적으로 거래는 ACID 특성을 가져야 합니다. 일명 ACID는 Atomic(원자성), Consistency(일관성), Isolated(격리), Durable(지속성) 네 단어의 첫 글자를 따서 작성되었습니다. 그 의미를 설명하기 위해 "은행 송금"을 예로 들어 보겠습니다. :
① 원자성: 트랜잭션을 구성하는 명령문은 논리적 단위를 형성하며 그 중 일부만 실행될 수 없습니다. 즉, 거래는 분할할 수 없는 가장 작은 단위입니다. 예: 은행 송금 과정에서 한 계좌에서 이체 금액을 차감하고 동시에 다른 계좌에 추가해야 합니다. 하나의 계좌만 변경하는 것은 불합리합니다.
② 일관성: 트랜잭션 처리가 실행되기 전과 후에 데이터베이스가 일관성을 유지합니다. 즉, 트랜잭션은 시스템 상태를 올바르게 변환해야 합니다. 예: 은행 이체 과정에서 이체 금액이 한 계좌에서 다른 계좌로 이체되거나 두 계좌가 모두 변경되지 않고 그대로 유지되며 다른 상황은 없습니다.3 격리: 하나의 거래가 다른 거래에 영향을 주지 않습니다. 즉, 어떤 트랜잭션에서도 불완전한 상태의 트랜잭션을 보는 것은 불가능합니다. 예를 들어, 은행 송금 중 이체 거래가 제출되기 전에는 다른 이체 거래가 대기 상태에만 있을 수 있습니다.
4 지속성: 거래 처리 효과를 영구적으로 저장할 수 있습니다. 반면에 트랜잭션은 서버, 프로세스, 통신, 미디어 오류 등을 포함한 모든 오류를 견딜 수 있어야 합니다. 예: 은행 이체 과정에서 이체 후 계좌 상태를 저장해야 합니다.
PHP에서 mysqli는 mysql 트랜잭션과 관련된 작업을 잘 캡슐화했습니다. 다음 예:
코드는 다음과 같습니다.
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'"; $sql2 = "update ScoreDetail set FScore = 300 where ID= '123456'"; $sql3 = "insert into ScoreDetail ID,Score) values ('123456',60)"; $mysqli = new mysqli('localhost','root','','DB_Lib2Test'); $mysqli->autocommit(false);//开始事物 $mysqli->query($sql1); $mysqli->query($sql2); if(!$mysqli->errno){ $mysqli->commit(); echo 'ok'; }else{ echo 'err'; $mysqli->rollback(); }
여기에서는 php mysql 시리즈
function을 사용하여 트랜잭션을 실행합니다.
코드는 다음과 같습니다:
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'"; $sql2 = "update ScoreDetail set FScore = 300 where ID= '123456'"; $sql3 = "insert into ScoreDetail ID,Score) values ('123456',60)"; $conn = mysql_connect('localhost','root',''); mysql_select_db('DB_Lib2Test'); mysql_query('start transaction'); //mysql_query('SET autocommit=0'); mysql_query($sql1); mysql_query($sql2); if(mysql_errno ()){ mysql_query('rollback'); echo 'err'; }else{ mysql_query('commit'); echo 'ok'; } // mysql_query('SET autocommit=1'); // mysql_query($sql3);
참고 사항:
MyISAM: 트랜잭션을 지원하지 않으며 성능 향상을 위해 읽기 전용 프로그램에 사용됩니다.InnoDB: ACID 트랜잭션, 행 수준 잠금, 동시성을 지원합니다. Berkeley DB : 거래 지원
위 내용은 PHP 작업 MySQL 트랜잭션 예제 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!