>백엔드 개발 >PHP 튜토리얼 >PHP 작업 MySQL 트랜잭션 예제 코드

PHP 작업 MySQL 트랜잭션 예제 코드

怪我咯
怪我咯원래의
2017-07-12 15:57:341182검색

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

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